jdunphy (owner)

Revisions

gist: 227307 Download_button fork
public
Public Clone URL: git://gist.github.com/227307.git
Embed All Files: show embed
memcache.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  ##
  # Pick a server to handle the request based on a hash of the key.
 
  def get_server_for_key(key, options = {})
    raise ArgumentError, "illegal character in key #{key.inspect}" if
      key =~ /\s/
    raise ArgumentError, "key too long #{key.inspect}" if key.length > 250
    raise MemCacheError, "No servers available" if @servers.empty?
    return @servers.first if @servers.length == 1
 
    hkey = hash_for(key)
 
    20.times do |try|
      entryidx = Continuum.binary_search(@continuum, hkey)
      server = @continuum[entryidx].server
      return server if server.alive?
      break unless failover
      hkey = hash_for "#{try}#{key}"
    end
    
    raise MemCacheError, "No servers available"
  end