Class ZKReplicationQueueStorage
java.lang.Object
org.apache.hadoop.hbase.replication.ZKReplicationStorageBase
org.apache.hadoop.hbase.replication.ZKReplicationQueueStorage
- All Implemented Interfaces:
ReplicationQueueStorage
@Private
class ZKReplicationQueueStorage
extends ZKReplicationStorageBase
implements ReplicationQueueStorage
ZK based replication queue storage.
The base znode for each regionserver is the regionserver name. For example:
/hbase/replication/rs/hostname.example.org,6020,1234Within this znode, the region server maintains a set of WAL replication queues. These queues are represented by child znodes named using there give queue id. For example:
/hbase/replication/rs/hostname.example.org,6020,1234/1 /hbase/replication/rs/hostname.example.org,6020,1234/2Each queue has one child znode for every WAL that still needs to be replicated. The value of these WAL child znodes is the latest position that has been replicated. This position is updated every time a WAL entry is replicated. For example:
/hbase/replication/rs/hostname.example.org,6020,1234/1/23522342.23422 [VALUE: 254]
-
Field Summary
Modifier and TypeFieldDescriptionprivate final String
The name of the znode that contains queues of hfile references to be replicatedprivate static final org.slf4j.Logger
private final String
The name of the znode that contains all replication queues(package private) final String
static final String
static final String
static final String
static final String
Fields inherited from class org.apache.hadoop.hbase.replication.ZKReplicationStorageBase
conf, REPLICATION_ZNODE, REPLICATION_ZNODE_DEFAULT, replicationZNode, zookeeper
-
Constructor Summary
ConstructorDescriptionZKReplicationQueueStorage
(ZKWatcher zookeeper, org.apache.hadoop.conf.Configuration conf) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addHFileRefs
(String peerId, List<Pair<org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path>> pairs) Add new hfile references to the queue.private void
addLastSeqIdsToOps
(String queueId, Map<String, Long> lastSeqIds, List<ZKUtil.ZKUtilOp> listOfOps) void
addPeerToHFileRefs
(String peerId) Add a peer to hfile reference queue if peer does not exist.void
addWAL
(ServerName serverName, String queueId, String fileName) Add a new WAL file to the given queue for a given regionserver.claimQueue
(ServerName sourceServerName, String queueId, ServerName destServerName) This implement must update the cversion of rootqueuesZNode
.Load all hfile references in all replication queues.Get list of all peers from hfile reference queue.getAllQueues
(ServerName serverName) Get a list of all queues for the specified region server.getAllQueues0
(ServerName serverName) The optimistic lock of this implement is based on the cversion of rootqueuesZNode
.private String
getFileNode
(String queueNode, String fileName) private String
getFileNode
(ServerName serverName, String queueId, String fileName) private String
getHFileNode
(String peerNode, String fileName) private String
getHFileRefsPeerNode
(String peerId) protected int
long
getLastSequenceId
(String encodedRegionName, String peerId) Read the max sequence id of the specific region for a given peer.getLastSequenceIdWithVersion
(String encodedRegionName, String peerId) Return the {lastPushedSequenceId, ZNodeDataVersion} pair.Get a list of all region servers that have outstanding replication queues.private List<ServerName>
private String
getQueueNode
(ServerName serverName, String queueId) protected int
getReplicableHFiles
(String peerId) Get a list of all hfile references in the given peer.getReplicableHFiles0
(String peerId) getRsNode
(ServerName serverName) Get full znode name for given region server(package private) String
getSerialReplicationRegionPeerNode
(String encodedRegionName, String peerId) Put all regions under /hbase/replication/regions znode will lead to too many children because of the huge number of regions in real production environment.long
getWALPosition
(ServerName serverName, String queueId, String fileName) Get the current position for a specific WAL in a given queue for a given regionserver.getWALsInQueue
(ServerName serverName, String queueId) Get a list of all WALs in the given queue on the given region server.getWALsInQueue0
(ServerName serverName, String queueId) void
removeHFileRefs
(String peerId, List<String> files) Remove hfile references from the queue.void
removeLastSequenceIds
(String peerId) Remove all the max sequence id record for the given peer.void
removeLastSequenceIds
(String peerId, List<String> encodedRegionNames) Remove the max sequence id record for the given peer and regions.void
removePeerFromHFileRefs
(String peerId) Remove a peer from hfile reference queue.void
removeQueue
(ServerName serverName, String queueId) Remove a replication queue for a given regionserver.void
removeReplicatorIfQueueIsEmpty
(ServerName serverName) Remove the record of region server if the queue is empty.void
removeWAL
(ServerName serverName, String queueId, String fileName) Remove an WAL file from the given queue for a given regionserver.void
setLastSequenceIds
(String peerId, Map<String, Long> lastSeqIds) Set the max sequence id of a bunch of regions for a given peer.void
setWALPosition
(ServerName serverName, String queueId, String fileName, long position, Map<String, Long> lastSeqIds) Set the current position for a specific WAL in a given queue for a given regionserver.Methods inherited from class org.apache.hadoop.hbase.replication.ZKReplicationStorageBase
toByteArray
-
Field Details
-
LOG
-
ZOOKEEPER_ZNODE_REPLICATION_HFILE_REFS_KEY
- See Also:
-
ZOOKEEPER_ZNODE_REPLICATION_HFILE_REFS_DEFAULT
- See Also:
-
ZOOKEEPER_ZNODE_REPLICATION_REGIONS_KEY
- See Also:
-
ZOOKEEPER_ZNODE_REPLICATION_REGIONS_DEFAULT
- See Also:
-
queuesZNode
The name of the znode that contains all replication queues -
hfileRefsZNode
The name of the znode that contains queues of hfile references to be replicated -
regionsZNode
-
-
Constructor Details
-
ZKReplicationQueueStorage
-
-
Method Details
-
getRsNode
Description copied from interface:ReplicationQueueStorage
Get full znode name for given region server- Specified by:
getRsNode
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the region server- Returns:
- full znode name
-
getQueueNode
-
getFileNode
-
getFileNode
-
getSerialReplicationRegionPeerNode
Put all regions under /hbase/replication/regions znode will lead to too many children because of the huge number of regions in real production environment. So here we will distribute the znodes to multiple directories.
So the final znode path will be format like this:
/hbase/replication/regions/dd/04/e76a6966d4ffa908ed0586764767-100
Here the full encoded region name is dd04e76a6966d4ffa908ed0586764767, and we use the first two characters 'dd' as the first level directory name, and use the next two characters '04' as the second level directory name, and the rest part as the prefix of the znode, and the suffix '100' is the peer id.- Parameters:
encodedRegionName
- the encoded region name.peerId
- peer id for replication.- Returns:
- ZNode path to persist the max sequence id that we've pushed for the given region and peer.
-
removeQueue
Description copied from interface:ReplicationQueueStorage
Remove a replication queue for a given regionserver.- Specified by:
removeQueue
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the regionserverqueueId
- a String that identifies the queue.- Throws:
ReplicationException
-
addWAL
public void addWAL(ServerName serverName, String queueId, String fileName) throws ReplicationException Description copied from interface:ReplicationQueueStorage
Add a new WAL file to the given queue for a given regionserver. If the queue does not exist it is created.- Specified by:
addWAL
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the regionserverqueueId
- a String that identifies the queue.fileName
- name of the WAL- Throws:
ReplicationException
-
removeWAL
public void removeWAL(ServerName serverName, String queueId, String fileName) throws ReplicationException Description copied from interface:ReplicationQueueStorage
Remove an WAL file from the given queue for a given regionserver.- Specified by:
removeWAL
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the regionserverqueueId
- a String that identifies the queue.fileName
- name of the WAL- Throws:
ReplicationException
-
addLastSeqIdsToOps
private void addLastSeqIdsToOps(String queueId, Map<String, Long> lastSeqIds, List<ZKUtil.ZKUtilOp> listOfOps) throws org.apache.zookeeper.KeeperException, ReplicationException- Throws:
org.apache.zookeeper.KeeperException
ReplicationException
-
setWALPosition
public void setWALPosition(ServerName serverName, String queueId, String fileName, long position, Map<String, Long> lastSeqIds) throws ReplicationExceptionDescription copied from interface:ReplicationQueueStorage
Set the current position for a specific WAL in a given queue for a given regionserver.- Specified by:
setWALPosition
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the regionserverqueueId
- a String that identifies the queuefileName
- name of the WALposition
- the current position in the file. Will ignore if less than or equal to 0.lastSeqIds
- map with {encodedRegionName, sequenceId} pairs for serial replication.- Throws:
ReplicationException
-
getLastSequenceIdWithVersion
protected Pair<Long,Integer> getLastSequenceIdWithVersion(String encodedRegionName, String peerId) throws org.apache.zookeeper.KeeperException Return the {lastPushedSequenceId, ZNodeDataVersion} pair. if ZNodeDataVersion is -1, it means that the ZNode does not exist.- Throws:
org.apache.zookeeper.KeeperException
-
getLastSequenceId
Description copied from interface:ReplicationQueueStorage
Read the max sequence id of the specific region for a given peer. For serial replication, we need the max sequenced id to decide whether we can push the next entries.- Specified by:
getLastSequenceId
in interfaceReplicationQueueStorage
- Parameters:
encodedRegionName
- the encoded region namepeerId
- peer id- Returns:
- the max sequence id of the specific region for a given peer.
- Throws:
ReplicationException
-
setLastSequenceIds
public void setLastSequenceIds(String peerId, Map<String, Long> lastSeqIds) throws ReplicationExceptionDescription copied from interface:ReplicationQueueStorage
Set the max sequence id of a bunch of regions for a given peer. Will be called when setting up a serial replication peer.- Specified by:
setLastSequenceIds
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer idlastSeqIds
- map with {encodedRegionName, sequenceId} pairs for serial replication.- Throws:
ReplicationException
-
removeLastSequenceIds
Description copied from interface:ReplicationQueueStorage
Remove all the max sequence id record for the given peer.- Specified by:
removeLastSequenceIds
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer id- Throws:
ReplicationException
-
removeLastSequenceIds
public void removeLastSequenceIds(String peerId, List<String> encodedRegionNames) throws ReplicationException Description copied from interface:ReplicationQueueStorage
Remove the max sequence id record for the given peer and regions.- Specified by:
removeLastSequenceIds
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer idencodedRegionNames
- the encoded region names- Throws:
ReplicationException
-
getWALPosition
public long getWALPosition(ServerName serverName, String queueId, String fileName) throws ReplicationException Description copied from interface:ReplicationQueueStorage
Get the current position for a specific WAL in a given queue for a given regionserver.- Specified by:
getWALPosition
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the name of the regionserverqueueId
- a String that identifies the queuefileName
- name of the WAL- Returns:
- the current position in the file
- Throws:
ReplicationException
-
claimQueue
public Pair<String,SortedSet<String>> claimQueue(ServerName sourceServerName, String queueId, ServerName destServerName) throws ReplicationException This implement must update the cversion of rootqueuesZNode
. The optimistic lock of thegetAllWALs()
method is based on the cversion of rootqueuesZNode
.- Specified by:
claimQueue
in interfaceReplicationQueueStorage
- Parameters:
sourceServerName
- the name of the dead region serverqueueId
- the id of the queuedestServerName
- the name of the target region server- Returns:
- the new PeerId and A SortedSet of WALs in its queue
- Throws:
ReplicationException
- See Also:
-
removeReplicatorIfQueueIsEmpty
Description copied from interface:ReplicationQueueStorage
Remove the record of region server if the queue is empty.- Specified by:
removeReplicatorIfQueueIsEmpty
in interfaceReplicationQueueStorage
- Throws:
ReplicationException
-
getListOfReplicators0
- Throws:
org.apache.zookeeper.KeeperException
-
getListOfReplicators
Description copied from interface:ReplicationQueueStorage
Get a list of all region servers that have outstanding replication queues. These servers could be alive, dead or from a previous run of the cluster.- Specified by:
getListOfReplicators
in interfaceReplicationQueueStorage
- Returns:
- a list of server names
- Throws:
ReplicationException
-
getWALsInQueue0
private List<String> getWALsInQueue0(ServerName serverName, String queueId) throws org.apache.zookeeper.KeeperException - Throws:
org.apache.zookeeper.KeeperException
-
getWALsInQueue
public List<String> getWALsInQueue(ServerName serverName, String queueId) throws ReplicationException Description copied from interface:ReplicationQueueStorage
Get a list of all WALs in the given queue on the given region server.- Specified by:
getWALsInQueue
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the server name of the region server that owns the queuequeueId
- a String that identifies the queue- Returns:
- a list of WALs
- Throws:
ReplicationException
-
getAllQueues0
private List<String> getAllQueues0(ServerName serverName) throws org.apache.zookeeper.KeeperException - Throws:
org.apache.zookeeper.KeeperException
-
getAllQueues
Description copied from interface:ReplicationQueueStorage
Get a list of all queues for the specified region server.- Specified by:
getAllQueues
in interfaceReplicationQueueStorage
- Parameters:
serverName
- the server name of the region server that owns the set of queues- Returns:
- a list of queueIds
- Throws:
ReplicationException
-
getQueuesZNodeCversion
- Throws:
org.apache.zookeeper.KeeperException
-
getAllWALs
The optimistic lock of this implement is based on the cversion of rootqueuesZNode
. Therefore, we must update the cversion of rootqueuesZNode
when migrate wal nodes to other queues.- Specified by:
getAllWALs
in interfaceReplicationQueueStorage
- Throws:
ReplicationException
- See Also:
-
getHFileRefsPeerNode
-
getHFileNode
-
addPeerToHFileRefs
Description copied from interface:ReplicationQueueStorage
Add a peer to hfile reference queue if peer does not exist.- Specified by:
addPeerToHFileRefs
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer cluster id to be added- Throws:
ReplicationException
- if fails to add a peer id to hfile reference queue
-
removePeerFromHFileRefs
Description copied from interface:ReplicationQueueStorage
Remove a peer from hfile reference queue.- Specified by:
removePeerFromHFileRefs
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer cluster id to be removed- Throws:
ReplicationException
-
addHFileRefs
public void addHFileRefs(String peerId, List<Pair<org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path>> pairs) throws ReplicationExceptionDescription copied from interface:ReplicationQueueStorage
Add new hfile references to the queue.- Specified by:
addHFileRefs
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer cluster id to which the hfiles need to be replicatedpairs
- list of pairs of { HFile location in staging dir, HFile path in region dir which will be added in the queue }- Throws:
ReplicationException
- if fails to add a hfile reference
-
removeHFileRefs
Description copied from interface:ReplicationQueueStorage
Remove hfile references from the queue.- Specified by:
removeHFileRefs
in interfaceReplicationQueueStorage
- Parameters:
peerId
- peer cluster id from which this hfile references needs to be removedfiles
- list of hfile references to be removed- Throws:
ReplicationException
-
getAllPeersFromHFileRefsQueue0
- Throws:
org.apache.zookeeper.KeeperException
-
getAllPeersFromHFileRefsQueue
Description copied from interface:ReplicationQueueStorage
Get list of all peers from hfile reference queue.- Specified by:
getAllPeersFromHFileRefsQueue
in interfaceReplicationQueueStorage
- Returns:
- a list of peer ids
- Throws:
ReplicationException
-
getReplicableHFiles0
private List<String> getReplicableHFiles0(String peerId) throws org.apache.zookeeper.KeeperException - Throws:
org.apache.zookeeper.KeeperException
-
getReplicableHFiles
Description copied from interface:ReplicationQueueStorage
Get a list of all hfile references in the given peer.- Specified by:
getReplicableHFiles
in interfaceReplicationQueueStorage
- Parameters:
peerId
- a String that identifies the peer- Returns:
- a list of hfile references
- Throws:
ReplicationException
-
getHFileRefsZNodeCversion
- Throws:
ReplicationException
-
getAllHFileRefs
Description copied from interface:ReplicationQueueStorage
Load all hfile references in all replication queues. This method guarantees to return a snapshot which contains all hfile references at the start of this call. However, some newly created hfile references during the call may not be included.- Specified by:
getAllHFileRefs
in interfaceReplicationQueueStorage
- Throws:
ReplicationException
-