org.apache.cassandra.locator
Class TokenMetadata

java.lang.Object
  extended by org.apache.cassandra.locator.TokenMetadata

public class TokenMetadata
extends java.lang.Object


Nested Class Summary
static class TokenMetadata.Topology
          Tracks the assignment of racks and endpoints in each datacenter for all the "normal" endpoints in this TokenMetadata.
 
Constructor Summary
TokenMetadata()
           
TokenMetadata(BiMultiValMap<Token,java.net.InetAddress> tokenToEndpointMap, TokenMetadata.Topology topology)
           
 
Method Summary
 void addBootstrapToken(Token token, java.net.InetAddress endpoint)
          Deprecated. 
 void addBootstrapTokens(java.util.Collection<Token> tokens, java.net.InetAddress endpoint)
           
 void addLeavingEndpoint(java.net.InetAddress endpoint)
           
 void addMovingEndpoint(Token token, java.net.InetAddress endpoint)
          Add a new moving endpoint
 void addRelocatingTokens(java.util.Collection<Token> tokens, java.net.InetAddress endpoint)
          Add new relocating ranges (tokens moving from their respective endpoints, to another).
 void clearUnsafe()
          used by tests
 TokenMetadata cloneAfterAllLeft()
          Create a copy of TokenMetadata with tokenToEndpointMap reflecting situation after all current leave operations have finished.
 TokenMetadata cloneAfterAllSettled()
          Create a copy of TokenMetadata with tokenToEndpointMap reflecting situation after all current leave, move, and relocate operations have finished.
 TokenMetadata cloneOnlyTokenMap()
          Create a copy of TokenMetadata with only tokenToEndpointMap.
static Token firstToken(java.util.ArrayList<Token> ring, Token start)
           
static int firstTokenIndex(java.util.ArrayList ring, Token start, boolean insertMin)
           
 BiMultiValMap<Token,java.net.InetAddress> getBootstrapTokens()
           
 java.net.InetAddress getEndpoint(Token token)
           
 java.net.InetAddress getEndpointForHostId(java.util.UUID hostId)
          Return the end-point for a unique host ID
 java.util.Map<java.net.InetAddress,java.util.UUID> getEndpointToHostIdMapForReading()
           
 com.google.common.collect.Multimap<java.net.InetAddress,Token> getEndpointToTokenMapForReading()
           
 java.util.UUID getHostId(java.net.InetAddress endpoint)
          Return the unique host ID for an end-point.
 java.util.Set<java.net.InetAddress> getLeavingEndpoints()
          caller should not modify leavingEndpoints
 java.util.Set<Pair<Token,java.net.InetAddress>> getMovingEndpoints()
          Endpoints which are migrating to the new tokens
 java.util.Map<Token,java.net.InetAddress> getNormalAndBootstrappingTokenToEndpointMap()
           
 java.util.Map<Range<Token>,java.util.Collection<java.net.InetAddress>> getPendingRanges(java.lang.String table)
          a mutable map may be returned but caller should not modify it
 java.util.List<Range<Token>> getPendingRanges(java.lang.String table, java.net.InetAddress endpoint)
           
 Token getPredecessor(Token token)
           
 Range<Token> getPrimaryRangeFor(Token right)
          Deprecated. 
 java.util.Collection<Range<Token>> getPrimaryRangesFor(java.util.Collection<Token> tokens)
           
 java.util.Map<Token,java.net.InetAddress> getRelocatingRanges()
          Ranges which are migrating to new endpoints.
 Token getSuccessor(Token token)
           
 Token getToken(java.net.InetAddress endpoint)
          Deprecated. 
 java.util.Collection<Token> getTokens(java.net.InetAddress endpoint)
           
 TokenMetadata.Topology getTopology()
           
 java.util.Collection<java.net.InetAddress> getWriteEndpoints(Token token, java.lang.String table, java.util.Collection<java.net.InetAddress> naturalEndpoints)
          write endpoints may be different from read endpoints, because read endpoints only need care about the "natural" nodes for a token, but write endpoints also need to account for nodes that are bootstrapping into the ring, and write data there too so that they stay up to date during the bootstrap process.
 void invalidateCaches()
           
 boolean isLeaving(java.net.InetAddress endpoint)
           
 boolean isMember(java.net.InetAddress endpoint)
           
 boolean isMoving(java.net.InetAddress endpoint)
           
 boolean isRelocating(Token token)
           
 int pendingRangeChanges(java.net.InetAddress source)
           
 java.lang.String printPendingRanges()
           
 java.lang.String printRelocatingRanges()
           
 void register(AbstractReplicationStrategy subscriber)
           
 void removeBootstrapTokens(java.util.Collection<Token> tokens)
           
 void removeEndpoint(java.net.InetAddress endpoint)
           
 void removeFromMoving(java.net.InetAddress endpoint)
          Remove pair of token/address from moving endpoints
 void removeFromRelocating(Token token, java.net.InetAddress endpoint)
          Remove pair of token/address from relocating ranges.
static java.util.Iterator<Token> ringIterator(java.util.ArrayList<Token> ring, Token start, boolean includeMin)
          iterator over the Tokens in the given ring, starting with the token for the node owning start (which does not have to be a Token in the ring)
 void setPendingRanges(java.lang.String table, com.google.common.collect.Multimap<Range<Token>,java.net.InetAddress> rangeMap)
           
 java.util.ArrayList<Token> sortedTokens()
           
 java.lang.String toString()
           
 void unregister(AbstractReplicationStrategy subscriber)
           
 void updateHostId(java.util.UUID hostId, java.net.InetAddress endpoint)
          Store an end-point to host ID mapping.
 void updateNormalToken(Token token, java.net.InetAddress endpoint)
          Update token map with a single token/endpoint pair in normal state.
 void updateNormalTokens(java.util.Collection<Token> tokens, java.net.InetAddress endpoint)
           
 void updateNormalTokens(com.google.common.collect.Multimap<java.net.InetAddress,Token> endpointTokens)
          Update token map with a set of token/endpoint pairs in normal state.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TokenMetadata

public TokenMetadata()

TokenMetadata

public TokenMetadata(BiMultiValMap<Token,java.net.InetAddress> tokenToEndpointMap,
                     TokenMetadata.Topology topology)
Method Detail

pendingRangeChanges

public int pendingRangeChanges(java.net.InetAddress source)
Returns:
the number of nodes bootstrapping into source's primary range

updateNormalToken

public void updateNormalToken(Token token,
                              java.net.InetAddress endpoint)
Update token map with a single token/endpoint pair in normal state.


updateNormalTokens

public void updateNormalTokens(java.util.Collection<Token> tokens,
                               java.net.InetAddress endpoint)

updateNormalTokens

public void updateNormalTokens(com.google.common.collect.Multimap<java.net.InetAddress,Token> endpointTokens)
Update token map with a set of token/endpoint pairs in normal state. Prefer this whenever there are multiple pairs to update, as each update (whether a single or multiple) is expensive (CASSANDRA-3831).

Parameters:
endpointTokens -

updateHostId

public void updateHostId(java.util.UUID hostId,
                         java.net.InetAddress endpoint)
Store an end-point to host ID mapping. Each ID must be unique, and cannot be changed after the fact.

Parameters:
hostId -
endpoint -

getHostId

public java.util.UUID getHostId(java.net.InetAddress endpoint)
Return the unique host ID for an end-point.


getEndpointForHostId

public java.net.InetAddress getEndpointForHostId(java.util.UUID hostId)
Return the end-point for a unique host ID


getEndpointToHostIdMapForReading

public java.util.Map<java.net.InetAddress,java.util.UUID> getEndpointToHostIdMapForReading()
Returns:
a copy of the endpoint-to-id map for read-only operations

addBootstrapToken

@Deprecated
public void addBootstrapToken(Token token,
                                         java.net.InetAddress endpoint)
Deprecated. 


addBootstrapTokens

public void addBootstrapTokens(java.util.Collection<Token> tokens,
                               java.net.InetAddress endpoint)

removeBootstrapTokens

public void removeBootstrapTokens(java.util.Collection<Token> tokens)

addLeavingEndpoint

public void addLeavingEndpoint(java.net.InetAddress endpoint)

addMovingEndpoint

public void addMovingEndpoint(Token token,
                              java.net.InetAddress endpoint)
Add a new moving endpoint

Parameters:
token - token which is node moving to
endpoint - address of the moving node

addRelocatingTokens

public void addRelocatingTokens(java.util.Collection<Token> tokens,
                                java.net.InetAddress endpoint)
Add new relocating ranges (tokens moving from their respective endpoints, to another).

Parameters:
tokens - tokens being moved
endpoint - destination of moves

removeEndpoint

public void removeEndpoint(java.net.InetAddress endpoint)

removeFromMoving

public void removeFromMoving(java.net.InetAddress endpoint)
Remove pair of token/address from moving endpoints

Parameters:
endpoint - address of the moving node

removeFromRelocating

public void removeFromRelocating(Token token,
                                 java.net.InetAddress endpoint)
Remove pair of token/address from relocating ranges.

Parameters:
endpoint -

getTokens

public java.util.Collection<Token> getTokens(java.net.InetAddress endpoint)

getToken

@Deprecated
public Token getToken(java.net.InetAddress endpoint)
Deprecated. 


isMember

public boolean isMember(java.net.InetAddress endpoint)

isLeaving

public boolean isLeaving(java.net.InetAddress endpoint)

isMoving

public boolean isMoving(java.net.InetAddress endpoint)

isRelocating

public boolean isRelocating(Token token)

cloneOnlyTokenMap

public TokenMetadata cloneOnlyTokenMap()
Create a copy of TokenMetadata with only tokenToEndpointMap. That is, pending ranges, bootstrap tokens and leaving endpoints are not included in the copy.


cloneAfterAllLeft

public TokenMetadata cloneAfterAllLeft()
Create a copy of TokenMetadata with tokenToEndpointMap reflecting situation after all current leave operations have finished.

Returns:
new token metadata

cloneAfterAllSettled

public TokenMetadata cloneAfterAllSettled()
Create a copy of TokenMetadata with tokenToEndpointMap reflecting situation after all current leave, move, and relocate operations have finished.

Returns:
new token metadata

getEndpoint

public java.net.InetAddress getEndpoint(Token token)

getPrimaryRangesFor

public java.util.Collection<Range<Token>> getPrimaryRangesFor(java.util.Collection<Token> tokens)

getPrimaryRangeFor

@Deprecated
public Range<Token> getPrimaryRangeFor(Token right)
Deprecated. 


sortedTokens

public java.util.ArrayList<Token> sortedTokens()

getPendingRanges

public java.util.Map<Range<Token>,java.util.Collection<java.net.InetAddress>> getPendingRanges(java.lang.String table)
a mutable map may be returned but caller should not modify it


getPendingRanges

public java.util.List<Range<Token>> getPendingRanges(java.lang.String table,
                                                     java.net.InetAddress endpoint)

setPendingRanges

public void setPendingRanges(java.lang.String table,
                             com.google.common.collect.Multimap<Range<Token>,java.net.InetAddress> rangeMap)

getPredecessor

public Token getPredecessor(Token token)

getSuccessor

public Token getSuccessor(Token token)

getBootstrapTokens

public BiMultiValMap<Token,java.net.InetAddress> getBootstrapTokens()
Returns:
a copy of the bootstrapping tokens map

getLeavingEndpoints

public java.util.Set<java.net.InetAddress> getLeavingEndpoints()
caller should not modify leavingEndpoints


getMovingEndpoints

public java.util.Set<Pair<Token,java.net.InetAddress>> getMovingEndpoints()
Endpoints which are migrating to the new tokens

Returns:
set of addresses of moving endpoints

getRelocatingRanges

public java.util.Map<Token,java.net.InetAddress> getRelocatingRanges()
Ranges which are migrating to new endpoints.

Returns:
set of token-address pairs of relocating ranges

firstTokenIndex

public static int firstTokenIndex(java.util.ArrayList ring,
                                  Token start,
                                  boolean insertMin)

firstToken

public static Token firstToken(java.util.ArrayList<Token> ring,
                               Token start)

ringIterator

public static java.util.Iterator<Token> ringIterator(java.util.ArrayList<Token> ring,
                                                     Token start,
                                                     boolean includeMin)
iterator over the Tokens in the given ring, starting with the token for the node owning start (which does not have to be a Token in the ring)

Parameters:
includeMin - True if the minimum token should be returned in the ring even if it has no owner.

clearUnsafe

public void clearUnsafe()
used by tests


toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

printPendingRanges

public java.lang.String printPendingRanges()

printRelocatingRanges

public java.lang.String printRelocatingRanges()

invalidateCaches

public void invalidateCaches()

register

public void register(AbstractReplicationStrategy subscriber)

unregister

public void unregister(AbstractReplicationStrategy subscriber)

getWriteEndpoints

public java.util.Collection<java.net.InetAddress> getWriteEndpoints(Token token,
                                                                    java.lang.String table,
                                                                    java.util.Collection<java.net.InetAddress> naturalEndpoints)
write endpoints may be different from read endpoints, because read endpoints only need care about the "natural" nodes for a token, but write endpoints also need to account for nodes that are bootstrapping into the ring, and write data there too so that they stay up to date during the bootstrap process. Thus, this method may return more nodes than the Replication Factor. If possible, will return the same collection it was passed, for efficiency. Only ReplicationStrategy should care about this method (higher level users should only ask for Hinted).


getEndpointToTokenMapForReading

public com.google.common.collect.Multimap<java.net.InetAddress,Token> getEndpointToTokenMapForReading()
Returns:
an endpoint to token multimap representation of tokenToEndpointMap (a copy)

getNormalAndBootstrappingTokenToEndpointMap

public java.util.Map<Token,java.net.InetAddress> getNormalAndBootstrappingTokenToEndpointMap()
Returns:
a (stable copy, won't be modified) Token to Endpoint map for all the normal and bootstrapping nodes in the cluster.

getTopology

public TokenMetadata.Topology getTopology()
Returns:
the Topology map of nodes to DCs + Racks This is only allowed when a copy has been made of TokenMetadata, to avoid concurrent modifications when Topology methods are subsequently used by the caller.


Copyright © 2012 The Apache Software Foundation