net.spy.memcached
Class KetamaNodeLocator

java.lang.Object
  extended by net.spy.memcached.compat.SpyObject
      extended by net.spy.memcached.KetamaNodeLocator
All Implemented Interfaces:
NodeLocator

public final class KetamaNodeLocator
extends SpyObject
implements NodeLocator

This is an implementation of the Ketama consistent hash strategy from last.fm. This implementation may not be compatible with libketama as hashing is considered separate from node location. Note that this implementation does not currently supported weighted nodes.

See Also:
RJ's blog post

Constructor Summary
KetamaNodeLocator(java.util.List<MemcachedNode> nodes, HashAlgorithm alg)
          Create a new KetamaNodeLocator using specified nodes and the specifed hash algorithm.
KetamaNodeLocator(java.util.List<MemcachedNode> nodes, HashAlgorithm alg, KetamaNodeLocatorConfiguration conf)
          Create a new KetamaNodeLocator using specified nodes and the specifed hash algorithm and configuration.
 
Method Summary
 java.util.Collection<MemcachedNode> getAll()
          Get all memcached nodes.
protected  java.util.TreeMap<java.lang.Long,MemcachedNode> getKetamaNodes()
           
 MemcachedNode getPrimary(java.lang.String k)
          Get the primary location for the given key.
 NodeLocator getReadonlyCopy()
          Create a read-only copy of this NodeLocator.
 java.util.Iterator<MemcachedNode> getSequence(java.lang.String k)
          Get an iterator over the sequence of nodes that make up the backup locations for a given key.
protected  void setKetamaNodes(java.util.List<MemcachedNode> nodes)
          Setup the KetamaNodeLocator with the list of nodes it should use.
 void updateLocator(java.util.List<MemcachedNode> nodes)
          Update locator status.
 
Methods inherited from class net.spy.memcached.compat.SpyObject
getLogger
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

KetamaNodeLocator

public KetamaNodeLocator(java.util.List<MemcachedNode> nodes,
                         HashAlgorithm alg)
Create a new KetamaNodeLocator using specified nodes and the specifed hash algorithm.

Parameters:
nodes - The List of nodes to use in the Ketama consistent hash continuum
alg - The hash algorithm to use when choosing a node in the Ketama consistent hash continuum

KetamaNodeLocator

public KetamaNodeLocator(java.util.List<MemcachedNode> nodes,
                         HashAlgorithm alg,
                         KetamaNodeLocatorConfiguration conf)
Create a new KetamaNodeLocator using specified nodes and the specifed hash algorithm and configuration.

Parameters:
nodes - The List of nodes to use in the Ketama consistent hash continuum
alg - The hash algorithm to use when choosing a node in the Ketama consistent hash continuum
conf -
Method Detail

getAll

public java.util.Collection<MemcachedNode> getAll()
Description copied from interface: NodeLocator
Get all memcached nodes. This is useful for broadcasting messages.

Specified by:
getAll in interface NodeLocator

getPrimary

public MemcachedNode getPrimary(java.lang.String k)
Description copied from interface: NodeLocator
Get the primary location for the given key.

Specified by:
getPrimary in interface NodeLocator
Parameters:
k - the object key
Returns:
the QueueAttachment containing the primary storage for a key

getSequence

public java.util.Iterator<MemcachedNode> getSequence(java.lang.String k)
Description copied from interface: NodeLocator
Get an iterator over the sequence of nodes that make up the backup locations for a given key.

Specified by:
getSequence in interface NodeLocator
Parameters:
k - the object key
Returns:
the sequence of backup nodes.

getReadonlyCopy

public NodeLocator getReadonlyCopy()
Description copied from interface: NodeLocator
Create a read-only copy of this NodeLocator.

Specified by:
getReadonlyCopy in interface NodeLocator

updateLocator

public void updateLocator(java.util.List<MemcachedNode> nodes)
Description copied from interface: NodeLocator
Update locator status.

Specified by:
updateLocator in interface NodeLocator
Parameters:
nodes - New locator nodes.

getKetamaNodes

protected java.util.TreeMap<java.lang.Long,MemcachedNode> getKetamaNodes()
Returns:
the ketamaNodes

setKetamaNodes

protected void setKetamaNodes(java.util.List<MemcachedNode> nodes)
Setup the KetamaNodeLocator with the list of nodes it should use.

Parameters:
nodes - a List of MemcachedNodes for this KetamaNodeLocator to use in its continuum


Copyright © 2006-2009 Dustin Sallings, 2009-2012 Couchbase, Inc.