class DiskStore::Reaper
Constants
- DEFAULT_OPTS
Attributes
path[R]
Public Class Methods
new(path, opts = {})
click to toggle source
# File lib/disk_store/reaper.rb, line 28 def initialize(path, opts = {}) @path = path @options = DEFAULT_OPTS.merge(opts) set_eviction_strategy(@options[:eviction_strategy]) end
spawn_for(path, opts = {})
click to toggle source
Spawn exactly 1 reaper for each cache path
# File lib/disk_store/reaper.rb, line 18 def self.spawn_for(path, opts = {}) return Celluloid::Actor[path] if !Celluloid::Actor[path].nil? Reaper.supervise_as(path, path, opts) Celluloid::Actor[path].async.start! Celluloid::Actor[path] end
Public Instance Methods
set_eviction_strategy(strategy)
click to toggle source
# File lib/disk_store/reaper.rb, line 35 def set_eviction_strategy(strategy) return if strategy.nil? self.class.send :prepend, DiskStore::Reaper.const_get(strategy) end
start!()
click to toggle source
# File lib/disk_store/reaper.rb, line 40 def start! loop do perform_sweep! if needs_eviction? wait_for_next end end
Private Instance Methods
current_cache_size()
click to toggle source
# File lib/disk_store/reaper.rb, line 83 def current_cache_size files.inject(0) { |sum, file| sum + File.size(file) } end
directories()
click to toggle source
# File lib/disk_store/reaper.rb, line 75 def directories Dir[File.join(path, "**", "*")].select { |f| File.directory?(f) } end
directories_to_evict()
click to toggle source
# File lib/disk_store/reaper.rb, line 63 def directories_to_evict [] end
empty_directories()
click to toggle source
# File lib/disk_store/reaper.rb, line 79 def empty_directories directories.select { |d| Dir.entries(d).size == 2 } end
files()
click to toggle source
# File lib/disk_store/reaper.rb, line 71 def files Dir[File.join(path, "**", "*")].select { |f| File.file?(f) } end
files_to_evict()
click to toggle source
# File lib/disk_store/reaper.rb, line 59 def files_to_evict [] end
maximum_cache_size()
click to toggle source
# File lib/disk_store/reaper.rb, line 87 def maximum_cache_size @options[:cache_size].to_i end
needs_eviction?()
click to toggle source
# File lib/disk_store/reaper.rb, line 55 def needs_eviction? current_cache_size > maximum_cache_size end
perform_sweep!()
click to toggle source
# File lib/disk_store/reaper.rb, line 49 def perform_sweep! # Evict and delete selected files files_to_evict.each { |file| FileUtils.rm(file[:path]) } directories_to_evict.each { |dir| Dir.rmdir(dir) } end
wait_for_next()
click to toggle source
# File lib/disk_store/reaper.rb, line 67 def wait_for_next sleep @options[:reaper_interval] end