@InterfaceAudience.Private public class ReplicationSource extends java.lang.Thread implements ReplicationSourceInterface
Modifier and Type | Class and Description |
---|---|
static class |
ReplicationSource.LogsComparator
Comparator used to compare logs together based on their start time
|
Modifier and Type | Field and Description |
---|---|
static Log |
LOG |
Constructor and Description |
---|
ReplicationSource() |
Modifier and Type | Method and Description |
---|---|
void |
addHFileRefs(TableName tableName,
byte[] family,
java.util.List<Pair<Path,Path>> pairs)
Add hfile names to the queue to be replicated.
|
void |
enqueueLog(Path log)
Add a log to the list of logs to replicate
|
Path |
getCurrentPath()
Get the current log that's replicated
|
protected boolean |
getNextPath()
Poll for the next path
|
java.lang.String |
getPeerClusterId()
Get the id that the source is replicating to.
|
java.lang.String |
getPeerClusterZnode()
Get the id that the source is replicating to
|
MetricsSource |
getSourceMetrics()
Get Replication Source Metrics
|
java.lang.String |
getStats()
Get a string representation of the current statistics
for this source
|
void |
init(Configuration conf,
FileSystem fs,
ReplicationSourceManager manager,
ReplicationQueues replicationQueues,
ReplicationPeers replicationPeers,
Stoppable stopper,
java.lang.String peerClusterZnode,
java.util.UUID clusterId,
ReplicationEndpoint replicationEndpoint,
MetricsSource metrics)
Instantiation method used by region servers
|
protected boolean |
isPeerEnabled()
check whether the peer is enabled or not
|
protected boolean |
openReader(int sleepMultiplier)
Open a reader on the current path
|
protected boolean |
processEndOfFile()
If the queue isn't empty, switch to the next one
Else if this is a recovered queue, it means we're done!
Else we'll just continue to try reading the log file
|
protected boolean |
readAllEntriesToReplicateOrNextFile(boolean currentWALisBeingWrittenTo,
java.util.List<WAL.Entry> entries)
Read all the entries from the current log files and retain those
that need to be replicated.
|
void |
run() |
protected void |
shipEdits(boolean currentWALisBeingWrittenTo,
java.util.List<WAL.Entry> entries)
Do the shipping logic
|
protected boolean |
sleepForRetries(java.lang.String msg,
int sleepMultiplier)
Do the sleeping logic
|
void |
startup()
Start the replication
|
void |
terminate(java.lang.String reason)
End the replication
|
void |
terminate(java.lang.String reason,
java.lang.Exception cause)
End the replication
|
void |
terminate(java.lang.String reason,
java.lang.Exception cause,
boolean join) |
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
public void init(Configuration conf, FileSystem fs, ReplicationSourceManager manager, ReplicationQueues replicationQueues, ReplicationPeers replicationPeers, Stoppable stopper, java.lang.String peerClusterZnode, java.util.UUID clusterId, ReplicationEndpoint replicationEndpoint, MetricsSource metrics) throws java.io.IOException
init
in interface ReplicationSourceInterface
conf
- configuration to usefs
- file system to usemanager
- replication manager to ping tostopper
- the atomic boolean to use to stop the regionserverpeerClusterZnode
- the name of our znodeclusterId
- unique UUID for the clusterreplicationEndpoint
- the replication endpoint implementationmetrics
- metrics for replication sourcejava.io.IOException
public void enqueueLog(Path log)
ReplicationSourceInterface
enqueueLog
in interface ReplicationSourceInterface
log
- path to the log to replicatepublic void addHFileRefs(TableName tableName, byte[] family, java.util.List<Pair<Path,Path>> pairs) throws ReplicationException
ReplicationSourceInterface
addHFileRefs
in interface ReplicationSourceInterface
tableName
- Name of the table these files belongs tofamily
- Name of the family these files belong topairs
- list of pairs of { HFile location in staging dir, HFile path in region dir which
will be added in the queue for replication}ReplicationException
- If failed to add hfile referencespublic void run()
run
in interface java.lang.Runnable
run
in class java.lang.Thread
protected boolean readAllEntriesToReplicateOrNextFile(boolean currentWALisBeingWrittenTo, java.util.List<WAL.Entry> entries) throws java.io.IOException
currentWALisBeingWrittenTo
- is the current WAL being written toentries
- resulting entries to be replicatedjava.io.IOException
protected boolean getNextPath()
protected boolean openReader(int sleepMultiplier)
sleepMultiplier
- by how many times the default sleeping time is augmentedprotected boolean sleepForRetries(java.lang.String msg, int sleepMultiplier)
msg
- Why we sleepsleepMultiplier
- by how many times the default sleeping time is augmentedsleepMultiplier
is < maxRetriesMultiplier
protected void shipEdits(boolean currentWALisBeingWrittenTo, java.util.List<WAL.Entry> entries)
currentWALisBeingWrittenTo
- was the current WAL being (seemingly)
written to when this method was calledprotected boolean isPeerEnabled()
protected boolean processEndOfFile()
public void startup()
ReplicationSourceInterface
startup
in interface ReplicationSourceInterface
public void terminate(java.lang.String reason)
ReplicationSourceInterface
terminate
in interface ReplicationSourceInterface
reason
- why it's terminatingpublic void terminate(java.lang.String reason, java.lang.Exception cause)
ReplicationSourceInterface
terminate
in interface ReplicationSourceInterface
reason
- why it's terminatingcause
- the error that's causing itpublic void terminate(java.lang.String reason, java.lang.Exception cause, boolean join)
public java.lang.String getPeerClusterZnode()
ReplicationSourceInterface
getPeerClusterZnode
in interface ReplicationSourceInterface
public java.lang.String getPeerClusterId()
ReplicationSourceInterface
getPeerClusterId
in interface ReplicationSourceInterface
public Path getCurrentPath()
ReplicationSourceInterface
getCurrentPath
in interface ReplicationSourceInterface
public java.lang.String getStats()
ReplicationSourceInterface
getStats
in interface ReplicationSourceInterface
public MetricsSource getSourceMetrics()