diff options
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index bbf8740..2b02fb7 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -38,7 +38,7 @@ class MogileFS::MogileFS < MogileFS::Client ## # Enumerates keys starting with +key+. - def each_key(prefix) + def each_key(prefix = "") after = nil keys, after = list_keys prefix @@ -181,8 +181,11 @@ class MogileFS::MogileFS < MogileFS::Client # Returns the size of +key+. def size(key) @backend.respond_to?(:_size) and return @backend._size(domain, key) - paths = get_paths(key) - paths_size(paths) + begin + file_info(key)["length"].to_i + rescue MogileFS::Backend::UnknownCommandError + paths_size(get_paths(key)) + end end def paths_size(paths) @@ -194,25 +197,32 @@ class MogileFS::MogileFS < MogileFS::Client # Lists keys starting with +prefix+ follwing +after+ up to +limit+. If # +after+ is nil the list starts at the beginning. - def list_keys(prefix, after = nil, limit = 1000, &block) + def list_keys(prefix = "", after = nil, limit = 1000) if @backend.respond_to?(:_list_keys) - return @backend._list_keys(domain, prefix, after, limit, &block) + block_given? or return @backend._list_keys(domain, prefix, after, limit) + return @backend._list_keys(domain, prefix, after, limit) do |*a| + yield(*a) + end end res = begin @backend.list_keys(:domain => domain, :prefix => prefix, :after => after, :limit => limit) rescue MogileFS::Backend::NoneMatchError - return nil + return end 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| - paths = get_paths(key) - length = paths_size(paths) - yield key, length, paths.size + begin + res = file_info(key) + rescue MogileFS::Backend::UnknownCommandError # MogileFS < 2.45 + paths = get_paths(key) + res = { "length" => paths_size(paths), "devcount" => paths.size } + end + yield key, res["length"], res["devcount"] end end @@ -231,7 +241,8 @@ class MogileFS::MogileFS < MogileFS::Client args and devices = args[:devices] and opts[:devices] = devices ? 1 : 0 rv = @backend.file_info(opts) %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 } + devids = rv["devids"] and + rv["devids"] = devids.split(/,/).map! { |x| x.to_i } rv end |