Class: Flare::Util::KeyResolver::Modular

Inherits:
Object
  • Object
show all
Defined in:
lib/flare/util/key_resolver.rb

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ Modular

Returns a new instance of Modular.



10
11
12
13
14
15
16
17
# File 'lib/flare/util/key_resolver.rb', line 10

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

Instance Method Details

#calculate(psize) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/flare/util/key_resolver.rb', line 19

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) ⇒ Object



51
52
53
54
# File 'lib/flare/util/key_resolver.rb', line 51

def map partition_size, virtual
  calculate partition_size
  @map[partition_size][virtual]
end

#resolve(key_hash_value, partition_size) ⇒ Object



46
47
48
49
# File 'lib/flare/util/key_resolver.rb', line 46

def resolve key_hash_value, partition_size
  calculate partition_size
  @map[partition_size][key_hash_value % @virtual]
end