diff options
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index d942373..a40c519 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -248,14 +248,29 @@ class MogileFS::MogileFS < MogileFS::Client keys = (1..res['key_count'].to_i).map { |i| res["key_#{i}"] } if block_given? # emulate the MogileFS::Mysql interface, slowly... - keys.each do |key| - begin - res = file_info(key) - rescue MogileFS::Backend::UnknownCommandError # MogileFS < 2.45 + begin + opts = { :domain => @domain } + keys.each do |key| + opts[:key] = key + @backend.pipeline_dispatch(:file_info, opts) do |info| + if Hash === info + file_info_cleanup(info) + yield key, info["length"], info["devcount"] + else + raise info + end + end + end + @backend.pipeline_wait + rescue MogileFS::Backend::UnknownCommandError # MogileFS < 2.45 + @backend.shutdown # reset the socket + keys.each do |key| paths = get_paths(key) - res = { "length" => paths_size(paths), "devcount" => paths.size } + yield key, paths_size(paths), paths.size end - yield key, res["length"], res["devcount"] + rescue + @backend.shutdown + raise end end @@ -272,7 +287,10 @@ class MogileFS::MogileFS < MogileFS::Client def file_info(key, args = nil) opts = { :domain => @domain, :key => key } args and devices = args[:devices] and opts[:devices] = devices ? 1 : 0 - rv = @backend.file_info(opts) + file_info_cleanup(@backend.file_info(opts)) + end + + def file_info_cleanup(rv) %w(fid length devcount).each { |f| rv[f] = rv[f].to_i } devids = rv["devids"] and rv["devids"] = devids.split(/,/).map! { |x| x.to_i } |