org.apache.cassandra.service
Class StorageService

java.lang.Object
  extended by org.apache.cassandra.service.StorageService
All Implemented Interfaces:
IEndPointStateChangeSubscriber, StorageServiceMBean

public class StorageService
extends java.lang.Object
implements IEndPointStateChangeSubscriber, StorageServiceMBean


Nested Class Summary
static class StorageService.Verb
           
 
Field Summary
static char Delimiter
           
static StorageService instance
           
static java.lang.String MOVE_STATE
           
static java.lang.String REMOVE_TOKEN
           
static int RING_DELAY
           
static java.lang.String STATE_BOOTSTRAPPING
           
static java.lang.String STATE_LEAVING
           
static java.lang.String STATE_LEFT
           
static java.lang.String STATE_NORMAL
           
static StorageService.Verb[] VERBS
           
 
Constructor Summary
StorageService()
           
 
Method Summary
 void addBootstrapSource(java.net.InetAddress s, java.lang.String table)
           
static void calculatePendingRanges(AbstractReplicationStrategy strategy, java.lang.String table)
           
 void clearSnapshot()
          Remove all the existing snapshots.
 void decommission()
          transfer this node's data to other machines and remove it from service.
 void deliverHints(java.net.InetAddress endpoint)
          Deliver hints to the specified node when it has crashed and come back up/ marked as alive after a network partition
 void deliverHints(java.lang.String host)
          force hint delivery to an endpoint
 void doConsistencyCheck(Row row, java.util.List<java.net.InetAddress> endpoints, ReadCommand command)
          This method performs the requisite operations to make sure that the N replicas are in sync.
 void drain()
          shuts node off to writes, empties memtables and the commit log.
 java.net.InetAddress findSuitableEndPoint(java.lang.String table, java.lang.String key)
          This function finds the closest live endpoint that contains a given key.
 void forceTableCleanup()
          Trigger a cleanup of keys on all tables.
 void forceTableCleanup(java.lang.String tableName)
          Trigger a cleanup of keys on a single keyspace
 void forceTableCompaction()
          Forces major compaction (all sstable files compacted)
 void forceTableCompaction(java.lang.String tableName)
          Forces major compaction of a single keyspace
 void forceTableFlush(java.lang.String tableName, java.lang.String... columnFamilies)
          Flush all memtables for a table and column families.
 void forceTableRepair(java.lang.String tableName, java.lang.String... columnFamilies)
          Trigger proactive repair for a table and column families.
 java.util.List<Range> getAllRanges(java.util.List<Token> sortedTokens)
          Get all ranges that span the ring given a set of tokens.
 Token getBootstrapToken()
          return a token to which if a node bootstraps it will get about 1/2 of this node's range
 int getCurrentGenerationNumber()
          Return the generation value for this node.
 java.util.List<java.net.InetAddress> getLiveNaturalEndpoints(java.lang.String table, java.lang.String key)
          This method attempts to return N endpoints that are responsible for storing the specified key i.e for replication.
 java.util.List<java.net.InetAddress> getLiveNaturalEndpoints(java.lang.String table, Token token)
           
 java.util.Set<java.lang.String> getLiveNodes()
          Retrieve the list of live nodes in the cluster, where "liveness" is determined by the failure detector of the node being queried.
 double getLoad()
          raw load value
 java.util.Map<java.lang.String,java.lang.String> getLoadMap()
          Human-readable load value.
 java.lang.String getLoadString()
          Human-readable load value
 Range getLocalPrimaryRange()
           
 java.util.Collection<Range> getLocalRanges(java.lang.String table)
           
 Token getLocalToken()
           
 java.util.List<java.net.InetAddress> getNaturalEndpoints(java.lang.String table, java.lang.String key)
          This method returns the N endpoints that are responsible for storing the specified key i.e for replication.
 java.util.List<java.net.InetAddress> getNaturalEndpoints(java.lang.String table, Token token)
          This method returns the N endpoints that are responsible for storing the specified key i.e for replication.
 java.lang.String getOperationMode()
          get the operational mode (leaving, joining, normal, decommissioned, client)
static IPartitioner getPartitioner()
           
 Range getPrimaryRangeForEndPoint(java.net.InetAddress ep)
          Get the primary range for the specified endpoint.
 java.util.Map<Range,java.util.List<java.net.InetAddress>> getRangeToAddressMap(java.lang.String keyspace)
           
 java.util.Map<Range,java.util.List<java.lang.String>> getRangeToEndPointMap(java.lang.String keyspace)
          for a keyspace, return the ranges and corresponding hosts for a given keyspace.
 AbstractReplicationStrategy getReplicationStrategy(java.lang.String table)
           
static AbstractReplicationStrategy getReplicationStrategy(TokenMetadata tokenMetadata, java.lang.String table)
           
 java.util.List<Token> getSplits(Range range, int keysPerSplit)
           
 java.util.Map<java.lang.String,java.lang.String> getStringEndpointMap()
           
 java.net.InetAddress getSuccessor(java.net.InetAddress ep)
           
 java.lang.String getToken()
          Fetch a string representation of the token.
 TokenMetadata getTokenMetadata()
           
 java.util.Set<java.lang.String> getUnreachableNodes()
          Retrieve the list of unreachable nodes in the cluster, as determined by this node's failure detector.
 java.lang.Iterable<ColumnFamilyStore> getValidColumnFamilies(java.lang.String tableName, java.lang.String... columnFamilies)
           
 WriteResponseHandler getWriteResponseHandler(int blockFor, ConsistencyLevel consistency_level, java.lang.String table)
           
 void initClient()
           
 void initServer()
           
 boolean isBootstrapMode()
           
 boolean isClientMode()
           
 void loadBalance()
          This node will unload its data onto its neighbors, and bootstrap to share the range of the most-loaded node in the ring.
 void move(java.lang.String newToken)
           
 void onAlive(java.net.InetAddress endpoint, EndPointState state)
           
 void onChange(java.net.InetAddress endpoint, java.lang.String apStateName, ApplicationState apState)
           
 void onDead(java.net.InetAddress endpoint, EndPointState state)
           
 void onJoin(java.net.InetAddress endpoint, EndPointState epState)
          Use to inform interested parties about the change in the state for specified endpoint
 void onRemove(java.net.InetAddress endpoint)
           
 void removeBootstrapSource(java.net.InetAddress s, java.lang.String table)
           
 void removeToken(java.lang.String tokenString)
          removeToken removes token (and all data associated with enpoint that had it) from the ring
 void requestGC()
           
 void saveCaches()
          save row and key caches
 void setLog4jLevel(java.lang.String classQualifier, java.lang.String rawLevel)
          set the logging level at runtime
 void setToken(Token token)
          This method updates the local token on disk
 void stopClient()
           
 void takeAllSnapshot(java.lang.String tag)
          Takes a snapshot for every table.
 void takeSnapshot(java.lang.String tableName, java.lang.String tag)
          Takes the snapshot for a given table.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

RING_DELAY

public static final int RING_DELAY
See Also:
Constant Field Values

MOVE_STATE

public static final java.lang.String MOVE_STATE
See Also:
Constant Field Values

Delimiter

public static final char Delimiter
See Also:
Constant Field Values

STATE_BOOTSTRAPPING

public static final java.lang.String STATE_BOOTSTRAPPING
See Also:
Constant Field Values

STATE_NORMAL

public static final java.lang.String STATE_NORMAL
See Also:
Constant Field Values

STATE_LEAVING

public static final java.lang.String STATE_LEAVING
See Also:
Constant Field Values

STATE_LEFT

public static final java.lang.String STATE_LEFT
See Also:
Constant Field Values

REMOVE_TOKEN

public static final java.lang.String REMOVE_TOKEN
See Also:
Constant Field Values

VERBS

public static final StorageService.Verb[] VERBS

instance

public static final StorageService instance
Constructor Detail

StorageService

public StorageService()
Method Detail

getPartitioner

public static IPartitioner getPartitioner()

getLocalRanges

public java.util.Collection<Range> getLocalRanges(java.lang.String table)

getLocalPrimaryRange

public Range getLocalPrimaryRange()

addBootstrapSource

public void addBootstrapSource(java.net.InetAddress s,
                               java.lang.String table)

removeBootstrapSource

public void removeBootstrapSource(java.net.InetAddress s,
                                  java.lang.String table)

setToken

public void setToken(Token token)
This method updates the local token on disk


getReplicationStrategy

public AbstractReplicationStrategy getReplicationStrategy(java.lang.String table)

getReplicationStrategy

public static AbstractReplicationStrategy getReplicationStrategy(TokenMetadata tokenMetadata,
                                                                 java.lang.String table)

stopClient

public void stopClient()

initClient

public void initClient()
                throws java.io.IOException
Throws:
java.io.IOException

initServer

public void initServer()
                throws java.io.IOException,
                       ConfigurationException
Throws:
java.io.IOException
ConfigurationException

isBootstrapMode

public boolean isBootstrapMode()

getTokenMetadata

public TokenMetadata getTokenMetadata()

doConsistencyCheck

public void doConsistencyCheck(Row row,
                               java.util.List<java.net.InetAddress> endpoints,
                               ReadCommand command)
This method performs the requisite operations to make sure that the N replicas are in sync. We do this in the background when we do not care much about consistency.


getRangeToEndPointMap

public java.util.Map<Range,java.util.List<java.lang.String>> getRangeToEndPointMap(java.lang.String keyspace)
for a keyspace, return the ranges and corresponding hosts for a given keyspace.

Specified by:
getRangeToEndPointMap in interface StorageServiceMBean
Parameters:
keyspace -
Returns:

getRangeToAddressMap

public java.util.Map<Range,java.util.List<java.net.InetAddress>> getRangeToAddressMap(java.lang.String keyspace)

onChange

public void onChange(java.net.InetAddress endpoint,
                     java.lang.String apStateName,
                     ApplicationState apState)
Specified by:
onChange in interface IEndPointStateChangeSubscriber

calculatePendingRanges

public static void calculatePendingRanges(AbstractReplicationStrategy strategy,
                                          java.lang.String table)

onJoin

public void onJoin(java.net.InetAddress endpoint,
                   EndPointState epState)
Description copied from interface: IEndPointStateChangeSubscriber
Use to inform interested parties about the change in the state for specified endpoint

Specified by:
onJoin in interface IEndPointStateChangeSubscriber
Parameters:
endpoint - endpoint for which the state change occurred.
epState - state that actually changed for the above endpoint.

onAlive

public void onAlive(java.net.InetAddress endpoint,
                    EndPointState state)
Specified by:
onAlive in interface IEndPointStateChangeSubscriber

onRemove

public void onRemove(java.net.InetAddress endpoint)
Specified by:
onRemove in interface IEndPointStateChangeSubscriber

onDead

public void onDead(java.net.InetAddress endpoint,
                   EndPointState state)
Specified by:
onDead in interface IEndPointStateChangeSubscriber

getLoad

public double getLoad()
raw load value

Specified by:
getLoad in interface StorageServiceMBean

getLoadString

public java.lang.String getLoadString()
Description copied from interface: StorageServiceMBean
Human-readable load value

Specified by:
getLoadString in interface StorageServiceMBean

getLoadMap

public java.util.Map<java.lang.String,java.lang.String> getLoadMap()
Description copied from interface: StorageServiceMBean
Human-readable load value. Keys are IP addresses.

Specified by:
getLoadMap in interface StorageServiceMBean

deliverHints

public final void deliverHints(java.net.InetAddress endpoint)
Deliver hints to the specified node when it has crashed and come back up/ marked as alive after a network partition


deliverHints

public final void deliverHints(java.lang.String host)
                        throws java.net.UnknownHostException
Description copied from interface: StorageServiceMBean
force hint delivery to an endpoint

Specified by:
deliverHints in interface StorageServiceMBean
Throws:
java.net.UnknownHostException

getLocalToken

public Token getLocalToken()

getToken

public java.lang.String getToken()
Description copied from interface: StorageServiceMBean
Fetch a string representation of the token.

Specified by:
getToken in interface StorageServiceMBean
Returns:
a string token

getLiveNodes

public java.util.Set<java.lang.String> getLiveNodes()
Description copied from interface: StorageServiceMBean
Retrieve the list of live nodes in the cluster, where "liveness" is determined by the failure detector of the node being queried.

Specified by:
getLiveNodes in interface StorageServiceMBean
Returns:
set of IP addresses, as Strings

getUnreachableNodes

public java.util.Set<java.lang.String> getUnreachableNodes()
Description copied from interface: StorageServiceMBean
Retrieve the list of unreachable nodes in the cluster, as determined by this node's failure detector.

Specified by:
getUnreachableNodes in interface StorageServiceMBean
Returns:
set of IP addresses, as Strings

getCurrentGenerationNumber

public int getCurrentGenerationNumber()
Description copied from interface: StorageServiceMBean
Return the generation value for this node.

Specified by:
getCurrentGenerationNumber in interface StorageServiceMBean
Returns:
generation number

forceTableCleanup

public void forceTableCleanup()
                       throws java.io.IOException
Description copied from interface: StorageServiceMBean
Trigger a cleanup of keys on all tables.

Specified by:
forceTableCleanup in interface StorageServiceMBean
Throws:
java.io.IOException

forceTableCleanup

public void forceTableCleanup(java.lang.String tableName)
                       throws java.io.IOException
Description copied from interface: StorageServiceMBean
Trigger a cleanup of keys on a single keyspace

Specified by:
forceTableCleanup in interface StorageServiceMBean
Throws:
java.io.IOException

forceTableCompaction

public void forceTableCompaction()
                          throws java.io.IOException
Description copied from interface: StorageServiceMBean
Forces major compaction (all sstable files compacted)

Specified by:
forceTableCompaction in interface StorageServiceMBean
Throws:
java.io.IOException

forceTableCompaction

public void forceTableCompaction(java.lang.String tableName)
                          throws java.io.IOException
Description copied from interface: StorageServiceMBean
Forces major compaction of a single keyspace

Specified by:
forceTableCompaction in interface StorageServiceMBean
Throws:
java.io.IOException

takeSnapshot

public void takeSnapshot(java.lang.String tableName,
                         java.lang.String tag)
                  throws java.io.IOException
Takes the snapshot for a given table.

Specified by:
takeSnapshot in interface StorageServiceMBean
Parameters:
tableName - the name of the table.
tag - the tag given to the snapshot (null is permissible)
Throws:
java.io.IOException

takeAllSnapshot

public void takeAllSnapshot(java.lang.String tag)
                     throws java.io.IOException
Takes a snapshot for every table.

Specified by:
takeAllSnapshot in interface StorageServiceMBean
Parameters:
tag - the tag given to the snapshot (null is permissible)
Throws:
java.io.IOException

clearSnapshot

public void clearSnapshot()
                   throws java.io.IOException
Remove all the existing snapshots.

Specified by:
clearSnapshot in interface StorageServiceMBean
Throws:
java.io.IOException

getValidColumnFamilies

public java.lang.Iterable<ColumnFamilyStore> getValidColumnFamilies(java.lang.String tableName,
                                                                    java.lang.String... columnFamilies)
                                                             throws java.io.IOException
Throws:
java.io.IOException

forceTableFlush

public void forceTableFlush(java.lang.String tableName,
                            java.lang.String... columnFamilies)
                     throws java.io.IOException
Flush all memtables for a table and column families.

Specified by:
forceTableFlush in interface StorageServiceMBean
Parameters:
tableName -
columnFamilies -
Throws:
java.io.IOException

forceTableRepair

public void forceTableRepair(java.lang.String tableName,
                             java.lang.String... columnFamilies)
                      throws java.io.IOException
Trigger proactive repair for a table and column families.

Specified by:
forceTableRepair in interface StorageServiceMBean
Parameters:
tableName -
columnFamilies -
Throws:
java.io.IOException

getSuccessor

public java.net.InetAddress getSuccessor(java.net.InetAddress ep)

getPrimaryRangeForEndPoint

public Range getPrimaryRangeForEndPoint(java.net.InetAddress ep)
Get the primary range for the specified endpoint.

Parameters:
ep - endpoint we are interested in.
Returns:
range for the specified endpoint.

getAllRanges

public java.util.List<Range> getAllRanges(java.util.List<Token> sortedTokens)
Get all ranges that span the ring given a set of tokens. All ranges are in sorted order of ranges.

Returns:
ranges in sorted order

getNaturalEndpoints

public java.util.List<java.net.InetAddress> getNaturalEndpoints(java.lang.String table,
                                                                java.lang.String key)
This method returns the N endpoints that are responsible for storing the specified key i.e for replication.

Specified by:
getNaturalEndpoints in interface StorageServiceMBean
Parameters:
key - - key for which we need to find the endpoint return value - the endpoint responsible for this key
table - - key for which we need to find the endpoint return value - the endpoint responsible for this key

getNaturalEndpoints

public java.util.List<java.net.InetAddress> getNaturalEndpoints(java.lang.String table,
                                                                Token token)
This method returns the N endpoints that are responsible for storing the specified key i.e for replication.

Parameters:
token - - token for which we need to find the endpoint return value - the endpoint responsible for this token

getLiveNaturalEndpoints

public java.util.List<java.net.InetAddress> getLiveNaturalEndpoints(java.lang.String table,
                                                                    java.lang.String key)
This method attempts to return N endpoints that are responsible for storing the specified key i.e for replication.

Parameters:
key - - key for which we need to find the endpoint return value - the endpoint responsible for this key

getLiveNaturalEndpoints

public java.util.List<java.net.InetAddress> getLiveNaturalEndpoints(java.lang.String table,
                                                                    Token token)

findSuitableEndPoint

public java.net.InetAddress findSuitableEndPoint(java.lang.String table,
                                                 java.lang.String key)
                                          throws java.io.IOException,
                                                 UnavailableException
This function finds the closest live endpoint that contains a given key.

Throws:
java.io.IOException
UnavailableException

getStringEndpointMap

public java.util.Map<java.lang.String,java.lang.String> getStringEndpointMap()

setLog4jLevel

public void setLog4jLevel(java.lang.String classQualifier,
                          java.lang.String rawLevel)
Description copied from interface: StorageServiceMBean
set the logging level at runtime

Specified by:
setLog4jLevel in interface StorageServiceMBean

getSplits

public java.util.List<Token> getSplits(Range range,
                                       int keysPerSplit)
Returns:
list of Tokens (_not_ keys!) breaking up the data this node is responsible for into pieces of roughly keysPerSplit

getBootstrapToken

public Token getBootstrapToken()
return a token to which if a node bootstraps it will get about 1/2 of this node's range


decommission

public void decommission()
                  throws java.lang.InterruptedException
Description copied from interface: StorageServiceMBean
transfer this node's data to other machines and remove it from service.

Specified by:
decommission in interface StorageServiceMBean
Throws:
java.lang.InterruptedException

move

public void move(java.lang.String newToken)
          throws java.io.IOException,
                 java.lang.InterruptedException
Specified by:
move in interface StorageServiceMBean
Parameters:
newToken - token to move this node to. This node will unload its data onto its neighbors, and bootstrap to the new token.
Throws:
java.io.IOException
java.lang.InterruptedException

loadBalance

public void loadBalance()
                 throws java.io.IOException,
                        java.lang.InterruptedException
Description copied from interface: StorageServiceMBean
This node will unload its data onto its neighbors, and bootstrap to share the range of the most-loaded node in the ring.

Specified by:
loadBalance in interface StorageServiceMBean
Throws:
java.io.IOException
java.lang.InterruptedException

removeToken

public void removeToken(java.lang.String tokenString)
Description copied from interface: StorageServiceMBean
removeToken removes token (and all data associated with enpoint that had it) from the ring

Specified by:
removeToken in interface StorageServiceMBean

getWriteResponseHandler

public WriteResponseHandler getWriteResponseHandler(int blockFor,
                                                    ConsistencyLevel consistency_level,
                                                    java.lang.String table)

isClientMode

public boolean isClientMode()

requestGC

public void requestGC()

getOperationMode

public java.lang.String getOperationMode()
Description copied from interface: StorageServiceMBean
get the operational mode (leaving, joining, normal, decommissioned, client)

Specified by:
getOperationMode in interface StorageServiceMBean

drain

public void drain()
           throws java.io.IOException,
                  java.lang.InterruptedException,
                  java.util.concurrent.ExecutionException
shuts node off to writes, empties memtables and the commit log.

Specified by:
drain in interface StorageServiceMBean
Throws:
java.io.IOException
java.lang.InterruptedException
java.util.concurrent.ExecutionException

saveCaches

public void saveCaches()
                throws java.util.concurrent.ExecutionException,
                       java.lang.InterruptedException
Description copied from interface: StorageServiceMBean
save row and key caches

Specified by:
saveCaches in interface StorageServiceMBean
Throws:
java.util.concurrent.ExecutionException
java.lang.InterruptedException


Copyright © 2010 The Apache Software Foundation