org.apache.cassandra.db
Class HintedHandOffManager
java.lang.Object
org.apache.cassandra.db.HintedHandOffManager
- All Implemented Interfaces:
- HintedHandOffManagerMBean
public class HintedHandOffManager
- extends java.lang.Object
- implements HintedHandOffManagerMBean
For each endpoint for which we have hints, there is a row in the system hints CF.
The key for this row is ByteBuffer.wrap(string), i.e. "127.0.0.1".
SuperColumns in that row are keys for which we have hinted data.
Subcolumns names within that supercolumn are keyspace+CF, concatenated with SEPARATOR.
Subcolumn values are always empty; instead, we store the row data "normally"
in the application table it belongs in.
When FailureDetector signals that a node that was down is back up, we read its
hints row to see what rows we need to forward data for, then reach each row in its
entirety and send it over.
deliverHints is also exposed to JMX so it can be run manually if FD ever misses
its cue somehow.
HHM never deletes the row from Application tables; usually (but not for CL.ANY!)
the row belongs on this node, as well. instead, we rely on cleanup compactions
to remove data that doesn't belong. (Cleanup compactions may be started manually
-- on a per node basis -- with "nodeprobe cleanup.")
TODO this avoids our hint rows from growing excessively large by offloading the
message data into application tables. But, this means that cleanup compactions
will nuke HH data. Probably better would be to store the RowMutation messages
in a HHData (non-super) CF, modifying the above to store a UUID value in the
HH subcolumn value, which we use as a key to a [standard] HHData system CF
that would contain the message bytes.
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
instance
public static final HintedHandOffManager instance
HINTS_CF
public static final java.lang.String HINTS_CF
- See Also:
- Constant Field Values
HintedHandOffManager
public HintedHandOffManager()
registerMBean
public void registerMBean()
deleteHintsForEndpoint
public void deleteHintsForEndpoint(java.lang.String ipOrHostname)
- Description copied from interface:
HintedHandOffManagerMBean
- Nuke all hints from this node to `ep`.
- Specified by:
deleteHintsForEndpoint
in interface HintedHandOffManagerMBean
- Parameters:
ipOrHostname
- String rep. of endpoint address to delete hints for, either ip address ("127.0.0.1") or hostname
deleteHintsForEndpoint
public void deleteHintsForEndpoint(java.net.InetAddress endpoint)
makeCombinedName
public static java.nio.ByteBuffer makeCombinedName(java.lang.String tableName,
java.lang.String columnFamily)
deliverHints
public void deliverHints(java.net.InetAddress to)
deliverHints
public void deliverHints(java.lang.String to)
throws java.net.UnknownHostException
- Throws:
java.net.UnknownHostException
listEndpointsPendingHints
public java.util.List<java.lang.String> listEndpointsPendingHints()
- Description copied from interface:
HintedHandOffManagerMBean
- List all the endpoints that this node has hints for.
- Specified by:
listEndpointsPendingHints
in interface HintedHandOffManagerMBean
- Returns:
- set of endpoints; as Strings
countPendingHints
public java.util.Map<java.lang.String,java.lang.Integer> countPendingHints()
- Description copied from interface:
HintedHandOffManagerMBean
- List all the endpoints that this node has hints for, and
count the number of hints for each such endpoint.
- Specified by:
countPendingHints
in interface HintedHandOffManagerMBean
- Returns:
- map of endpoint -> hint count
Copyright © 2011 The Apache Software Foundation