module DiskStore::Reaper::LRU

Public Instance Methods

directories_to_evict() click to toggle source
# File lib/disk_store/eviction_strategies/lru.rb, line 26
def directories_to_evict
  empty_directories
end
files_to_evict() click to toggle source
# File lib/disk_store/eviction_strategies/lru.rb, line 4
def files_to_evict
  # Collect and sort files based on last access time
  sorted_files = files
    .map { |file|
      st = File.stat(file)
      { path: file, last_fetch: st.atime, size: st.size }
    }
    .sort { |a, b| a[:last_fetch] <=> b[:last_fetch] } # Oldest first

  # Determine which files to evict
  space_to_evict = current_cache_size - maximum_cache_size
  space_evicted = 0
  evictions = []
  while space_evicted < space_to_evict
    evicted_file = sorted_files.shift
    space_evicted += evicted_file[:size]
    evictions << evicted_file
  end

  evictions
end