@InterfaceAudience.Private public class ZooKeeperWatcher extends java.lang.Object implements Abortable, java.io.Closeable
This is the only class that implements Watcher
. Other internal
classes which need to be notified of ZooKeeper events must register with
the local instance of this watcher via registerListener(org.apache.hadoop.hbase.zookeeper.ZooKeeperListener)
.
This class also holds and manages the connection to ZooKeeper. Code to deal with connection related events and exceptions are handled here.
Modifier and Type | Field and Description |
---|---|
protected Abortable |
abortable |
java.lang.String |
assignmentZNode |
java.lang.String |
backupMasterAddressesZNode |
java.lang.String |
balancerZNode |
java.lang.String |
baseZNode |
java.lang.String |
clusterIdZNode |
java.lang.String |
clusterStateZNode |
static java.util.ArrayList<ACL> |
CREATOR_ALL_AND_WORLD_READABLE |
java.lang.String |
drainingZNode |
static java.lang.String |
masterMaintZNode |
static java.lang.String |
META_ZNODE_PREFIX |
static java.lang.String |
namespaceZNode |
java.lang.String |
recoveringRegionsZNode |
java.lang.String |
rsZNode |
java.util.concurrent.CountDownLatch |
saslLatch |
java.lang.String |
splitLogZNode |
java.lang.String |
tableLockZNode |
java.lang.String |
tableZNode |
Constructor and Description |
---|
ZooKeeperWatcher(Configuration conf,
java.lang.String identifier,
Abortable abortable)
Instantiate a ZooKeeper connection and watcher.
|
ZooKeeperWatcher(Configuration conf,
java.lang.String identifier,
Abortable abortable,
boolean canCreateBaseZNode)
Instantiate a ZooKeeper connection and watcher.
|
Modifier and Type | Method and Description |
---|---|
void |
abort(java.lang.String why,
java.lang.Throwable e)
Abort the server or client.
|
void |
checkAndSetZNodeAcls()
On master start, we check the znode ACLs under the root directory and set the ACLs properly
if needed.
|
void |
close()
Close the connection to ZooKeeper.
|
java.lang.String |
getBaseZNode() |
Configuration |
getConfiguration() |
java.util.List<ZooKeeperListener> |
getListeners()
Get a copy of current registered listeners
|
java.lang.String |
getMasterAddressZNode() |
int |
getMetaReplicaIdFromZnode(java.lang.String znode)
Parse the meta replicaId from the passed znode
|
java.util.List<java.lang.String> |
getMetaReplicaNodes()
Get the znodes corresponding to the meta replicas from ZK
|
int |
getNumberOfListeners() |
java.lang.String |
getQuorum()
Get the quorum address of this instance.
|
RecoverableZooKeeper |
getRecoverableZooKeeper()
Get the connection to ZooKeeper.
|
java.lang.String |
getRegionNormalizerZNode() |
java.lang.String |
getSwitchZNode() |
java.lang.String |
getZNodeForReplica(int replicaId)
Get the znode string corresponding to a replicaId
|
void |
interruptedException(java.lang.InterruptedException ie)
Handles InterruptedExceptions in client calls.
|
boolean |
isAborted()
Check if the server or client was aborted.
|
boolean |
isAnyMetaReplicaZnode(java.lang.String node)
Is the znode of any meta replica
|
boolean |
isClientReadable(java.lang.String node)
Returns whether the znode is supposed to be readable by the client
and DOES NOT contain sensitive information (world readable).
|
boolean |
isDefaultMetaReplicaZnode(java.lang.String node)
Is it the default meta replica's znode
|
static boolean |
isSuperUserId(java.lang.String[] superUsers,
Id id) |
void |
keeperException(KeeperException ke)
Handles KeeperExceptions in client calls.
|
java.lang.String |
prefix(java.lang.String str)
Adds this instance's identifier as a prefix to the passed
str |
void |
process(WatchedEvent event)
Method called from ZooKeeper for events and connection status.
|
void |
reconnectAfterExpiration() |
void |
registerListener(ZooKeeperListener listener)
Register the specified listener to receive ZooKeeper events.
|
void |
registerListenerFirst(ZooKeeperListener listener)
Register the specified listener to receive ZooKeeper events and add it as
the first in the list of current listeners.
|
void |
sync(java.lang.String path)
Forces a synchronization of this ZooKeeper client connection.
|
java.lang.String |
toString() |
void |
unregisterAllListeners()
Clean all existing listeners
|
void |
unregisterListener(ZooKeeperListener listener) |
protected Abortable abortable
public java.util.concurrent.CountDownLatch saslLatch
public java.lang.String baseZNode
public java.lang.String rsZNode
public java.lang.String drainingZNode
public java.lang.String backupMasterAddressesZNode
public java.lang.String clusterStateZNode
public java.lang.String assignmentZNode
public java.lang.String tableZNode
public java.lang.String clusterIdZNode
public java.lang.String splitLogZNode
public java.lang.String balancerZNode
public java.lang.String tableLockZNode
public java.lang.String recoveringRegionsZNode
public static java.lang.String namespaceZNode
public static java.lang.String masterMaintZNode
public static final java.util.ArrayList<ACL> CREATOR_ALL_AND_WORLD_READABLE
public static final java.lang.String META_ZNODE_PREFIX
public ZooKeeperWatcher(Configuration conf, java.lang.String identifier, Abortable abortable) throws ZooKeeperConnectionException, java.io.IOException
identifier
- string that is passed to RecoverableZookeeper to be used as
identifier for this instance. Use null for default.java.io.IOException
ZooKeeperConnectionException
public ZooKeeperWatcher(Configuration conf, java.lang.String identifier, Abortable abortable, boolean canCreateBaseZNode) throws java.io.IOException, ZooKeeperConnectionException
conf
- identifier
- string that is passed to RecoverableZookeeper to be used as identifier for
this instance. Use null for default.abortable
- Can be null if there is on error there is no host to abort: e.g. client
context.canCreateBaseZNode
- java.io.IOException
ZooKeeperConnectionException
public boolean isClientReadable(java.lang.String node)
public void checkAndSetZNodeAcls()
public static boolean isSuperUserId(java.lang.String[] superUsers, Id id)
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String prefix(java.lang.String str)
str
str
- String to amend.public boolean isAnyMetaReplicaZnode(java.lang.String node)
node
- public boolean isDefaultMetaReplicaZnode(java.lang.String node)
node
- public java.util.List<java.lang.String> getMetaReplicaNodes() throws KeeperException
KeeperException
public java.lang.String getZNodeForReplica(int replicaId)
replicaId
- public int getMetaReplicaIdFromZnode(java.lang.String znode)
znode
- public void registerListener(ZooKeeperListener listener)
listener
- public void registerListenerFirst(ZooKeeperListener listener)
listener
- public void unregisterListener(ZooKeeperListener listener)
public void unregisterAllListeners()
public java.util.List<ZooKeeperListener> getListeners()
public int getNumberOfListeners()
public RecoverableZooKeeper getRecoverableZooKeeper()
public void reconnectAfterExpiration() throws java.io.IOException, KeeperException, java.lang.InterruptedException
java.io.IOException
KeeperException
java.lang.InterruptedException
public java.lang.String getQuorum()
public java.lang.String getBaseZNode()
public void process(WatchedEvent event)
Valid events are passed along to listeners. Connection status changes are dealt with locally.
public void sync(java.lang.String path) throws KeeperException
Executing this method before running other methods will ensure that the subsequent operations are up-to-date and consistent as of the time that the sync is complete.
This is used for compareAndSwap type operations where we need to read the data of an existing node and delete or transition that node, utilizing the previously read version and data. We want to ensure that the version read is up-to-date from when we begin the operation.
KeeperException
public void keeperException(KeeperException ke) throws KeeperException
This may be temporary but for now this gives one place to deal with these.
TODO: Currently this method rethrows the exception to let the caller handle
ke
- KeeperException
public void interruptedException(java.lang.InterruptedException ie)
This may be temporary but for now this gives one place to deal with these.
TODO: Currently, this method does nothing. Is this ever expected to happen? Do we abort or can we let it run? Maybe this should be logged as WARN? It shouldn't happen?
ie
- public void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
java.lang.InterruptedException
public Configuration getConfiguration()
public void abort(java.lang.String why, java.lang.Throwable e)
Abortable
public boolean isAborted()
Abortable
public java.lang.String getMasterAddressZNode()
public java.lang.String getRegionNormalizerZNode()
public java.lang.String getSwitchZNode()