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