class Roma::Client::ClientRoutingTable

Attributes

div_bits[R]
fail_cnt[R]
hbits[R]
mklhash[RW]
rd[R]
rn[R]
search_mask[R]

Public Class Methods

new(rd) click to toggle source
   # File lib/roma/client/client_rttable.rb
17 def initialize(rd)
18   @rd = rd
19   @rn = @rd.rn
20   @div_bits=@rd.div_bits
21   @hbits = 2**@rd.dgst_bits
22   @search_mask = @rd.search_mask
23   @fail_cnt = Hash.new(0)
24   @mklhash = nil
25 end

Public Instance Methods

get_vnode_id(d) click to toggle source

Returns a vnode-id from digest.

   # File lib/roma/client/client_rttable.rb
36 def get_vnode_id(d)
37   d & @search_mask
38 end
nodes() click to toggle source
   # File lib/roma/client/client_rttable.rb
27 def nodes
28   @rd.nodes.clone
29 end
proc_failed(nid) click to toggle source
   # File lib/roma/client/client_rttable.rb
68 def proc_failed(nid)
69   @fail_cnt[nid] += 1
70   @mklhash = 0
71 end
search_node(key) click to toggle source
   # File lib/roma/client/client_rttable.rb
48 def search_node(key)
49   d = Digest::SHA1.hexdigest(key).hex % @hbits
50   nodes = @rd.v_idx[d & @search_mask]
51   nodes.each_index { |i|
52     return [nodes[i], d] if @fail_cnt[nodes[i]] == 0
53   }
54   # for expecting an auto assign process
55   svn = vn = d & @search_mask
56   while( (vn = @rd.next_vnode(vn)) != svn )
57     nodes = @rd.v_idx[vn]
58     nodes.each_index { |i|
59       return [nodes[i], d] if @fail_cnt[nodes[i]] == 0
60     }
61   end
62   nil
63 rescue => e
64   p e
65   nil
66 end
search_nodes(vn) click to toggle source

Returns a node-is list at the vnode. vn: vnode-id

   # File lib/roma/client/client_rttable.rb
42 def search_nodes(vn)
43   @rd.v_idx[vn].clone
44 rescue
45   nil
46 end
vnodes() click to toggle source
   # File lib/roma/client/client_rttable.rb
31 def vnodes
32   @rd.v_idx.keys
33 end