class Flare::Util::KeyResolver::Modular
Public Class Methods
new(params)
click to toggle source
# File lib/flare/util/key_resolver.rb, line 9 def initialize params @partition_size = params[:partition_size] || 1024 @virtual = params[:virtual] || 4096 @hint = params[:hint] || 1 @map = Array.new(@partition_size+1).map!{Array.new(@virtual, -1)} @next_calculate = 0 calculate 1 end
Public Instance Methods
calculate(psize)
click to toggle source
# File lib/flare/util/key_resolver.rb, line 18 def calculate psize return if psize < @next_calculate (@next_calculate..psize).each do |i| if i == 0 (0...@virtual).each do |j| @map[i][j] = 0 end else counter = Array.new(psize, 0) (0...@virtual).each do |j| if i <= @hint @map[i][j] = j % i else k = @map[i-1][j] counter[k] += 1 if (counter[k] % i) == (i - 1) @map[i][j] = i - 1 else @map[i][j] = @map[i-1][j] end end end end end @next_calculate = psize+1 end
map(partition_size, virtual)
click to toggle source
# File lib/flare/util/key_resolver.rb, line 50 def map partition_size, virtual calculate partition_size @map[partition_size][virtual] end
resolve(key_hash_value, partition_size)
click to toggle source
# File lib/flare/util/key_resolver.rb, line 45 def resolve key_hash_value, partition_size calculate partition_size @map[partition_size][key_hash_value % @virtual] end