Sha256: 053eb41609cc9d0c9923772cad597625846c6ecd252bf3fdd8153adabe63d239
Contents?: true
Size: 1.62 KB
Versions: 1
Compression:
Stored size: 1.62 KB
Contents
# -*- encoding: binary -*- module Regurgitator::FileInfo # :nodoc: include Regurgitator::Domain include Regurgitator::Device FILE_INFO = 'SELECT fid,length FROM file WHERE dmid = ? AND dkey = ? LIMIT 1' def file_info_init domain_init device_init end # returns a hash with file information and URIs for accessing the file: # { # :fid => 3149113, # :length => 17, # :uris => { # "east" => [ [read_write,read_only], [read_write,read_only] ], # "west" => [ [read_write,read_only], [read_write,read_only] ], # nil => [ [read_write,read_only], [read_write,read_only] ], # } # } def file_info(env, domain, dkey, update = false) dmid = get_dmid(domain) or return devices = refresh_device(update) info = @db[FILE_INFO, dmid, dkey].first or return 0 == info[:length] and return info fid = info[:fid] read_uris = Hash.new { |h,k| h[k] = [] } drain_uris = Hash.new { |h,k| h[k] = [] } zone = env['regurgitator.zone'] @db[DEVICES_ON, fid].each do |x| devinfo = devices[x[:devid]] or next fid >= 10_000_000_000 and next # TODO: support larger FIDs uris = devinfo[:uris][:pri] nfid = sprintf('%010u', fid) /\A(\d)(\d{3})(\d{3})(?:\d{3})\z/ =~ nfid fid_path = "/#$1/#$2/#$3/#{nfid}.fid" uris = uris.map do |u| u = u.dup u.path += fid_path # must be a copy u end (devinfo[:preferred] ? read_uris : drain_uris)[devinfo[:zone]] << uris end uris = info[:uris] = read_uris.empty? ? drain_uris : read_uris (uris.empty? && ! update) ? file_info(env, domain, dkey, true) : info end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
regurgitator-0.7.0 | lib/regurgitator/file_info.rb |