From 26b69dc45bf3c953905d5ed279e3f691ea802157 Mon Sep 17 00:00:00 2001 From: Jan Hentschel Date: Sun, 10 Dec 2017 15:07:01 +0100 Subject: [PATCH] HBASE-19474 Brought down the number of Checkstyle errors in hbase-zookeeper --- .../hbase/zookeeper/ClusterStatusTracker.java | 14 +- .../hadoop/hbase/zookeeper/EmptyWatcher.java | 2 +- .../hadoop/hbase/zookeeper/HQuorumPeer.java | 15 +- .../hbase/zookeeper/LoadBalancerTracker.java | 17 +- .../hbase/zookeeper/MasterAddressTracker.java | 36 +-- .../hbase/zookeeper/MetaTableLocator.java | 206 ++++++++++-------- .../hbase/zookeeper/MiniZooKeeperCluster.java | 53 ++--- .../hbase/zookeeper/RecoverableZooKeeper.java | 82 ++++--- .../zookeeper/RegionNormalizerTracker.java | 12 +- .../hadoop/hbase/zookeeper/ZKAclReset.java | 2 +- .../hadoop/hbase/zookeeper/ZKClusterId.java | 4 +- .../hbase/zookeeper/ZKLeaderManager.java | 2 +- .../hadoop/hbase/zookeeper/ZKMainServer.java | 16 +- .../hadoop/hbase/zookeeper/ZKNodeTracker.java | 28 ++- .../hadoop/hbase/zookeeper/ZKServerTool.java | 13 +- .../hadoop/hbase/zookeeper/ZKSplitLog.java | 12 +- .../apache/hadoop/hbase/zookeeper/ZKUtil.java | 192 +++++++++------- .../hadoop/hbase/zookeeper/ZKWatcher.java | 46 ++-- 18 files changed, 433 insertions(+), 319 deletions(-) diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java index d145d0825ac..4e9b34c576a 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java @@ -20,11 +20,12 @@ package org.apache.hadoop.hbase.zookeeper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.Abortable; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.zookeeper.KeeperException; + import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; -import org.apache.zookeeper.KeeperException; /** * Tracker on cluster settings up in zookeeper. @@ -42,8 +43,9 @@ public class ClusterStatusTracker extends ZKNodeTracker { * *

After construction, use {@link #start} to kick off tracking. * - * @param watcher - * @param abortable + * @param watcher reference to the {@link ZKWatcher} which also contains configuration and + * constants + * @param abortable used to abort if a fatal error occurs */ public ClusterStatusTracker(ZKWatcher watcher, Abortable abortable) { super(watcher, watcher.znodePaths.clusterStateZNode, abortable); @@ -52,7 +54,7 @@ public class ClusterStatusTracker extends ZKNodeTracker { /** * Checks if cluster is up. * @return true if the cluster up ('shutdown' is its name up in zk) znode - * exists with data, false if not + * exists with data, false if not */ public boolean isClusterUp() { return super.getData(false) != null; @@ -88,7 +90,7 @@ public class ClusterStatusTracker extends ZKNodeTracker { /** * @return Content of the clusterup znode as a serialized pb with the pb - * magic as prefix. + * magic as prefix. */ static byte [] toByteArray() { ZooKeeperProtos.ClusterUp.Builder builder = diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java index 1ec4f1d03fd..ce6a5feacc0 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java @@ -25,7 +25,7 @@ import org.apache.zookeeper.Watcher; * An empty ZooKeeper watcher */ @InterfaceAudience.Private -public class EmptyWatcher implements Watcher { +public final class EmptyWatcher implements Watcher { // Used in this package but also by tests so needs to be public public static final EmptyWatcher instance = new EmptyWatcher(); private EmptyWatcher() {} diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java index 93573971582..01935158797 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java @@ -35,11 +35,11 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HBaseInterfaceAudience; import org.apache.hadoop.hbase.HConstants; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.hbase.util.DNS; import org.apache.hadoop.hbase.util.Strings; import org.apache.hadoop.util.StringUtils; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.yetus.audience.InterfaceStability; import org.apache.zookeeper.server.ServerConfig; import org.apache.zookeeper.server.ZooKeeperServerMain; import org.apache.zookeeper.server.quorum.QuorumPeerConfig; @@ -54,7 +54,9 @@ import org.apache.zookeeper.server.quorum.QuorumPeerMain; */ @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS) @InterfaceStability.Evolving -public class HQuorumPeer { +public final class HQuorumPeer { + private HQuorumPeer() { + } /** * Parse ZooKeeper configuration from HBase XML config and run a QuorumPeer. @@ -80,7 +82,8 @@ public class HQuorumPeer { } } - private static void runZKServer(QuorumPeerConfig zkConfig) throws UnknownHostException, IOException { + private static void runZKServer(QuorumPeerConfig zkConfig) + throws UnknownHostException, IOException { if (zkConfig.isDistributed()) { QuorumPeerMain qp = new QuorumPeerMain(); qp.runFromConfig(zkConfig); @@ -139,8 +142,8 @@ public class HQuorumPeer { } // Set the max session timeout from the provided client-side timeout - properties.setProperty("maxSessionTimeout", - conf.get(HConstants.ZK_SESSION_TIMEOUT, Integer.toString(HConstants.DEFAULT_ZK_SESSION_TIMEOUT))); + properties.setProperty("maxSessionTimeout", conf.get(HConstants.ZK_SESSION_TIMEOUT, + Integer.toString(HConstants.DEFAULT_ZK_SESSION_TIMEOUT))); if (myId == -1) { throw new IOException("Could not find my address: " + myAddress + diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.java index 55dafcb3b20..cddce3319fa 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.java @@ -21,13 +21,14 @@ import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.exceptions.DeserializationException; +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.zookeeper.KeeperException; + import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.LoadBalancerProtos; -import org.apache.hadoop.hbase.util.Bytes; -import org.apache.zookeeper.KeeperException; /** * Tracks the load balancer state up in ZK @@ -57,12 +58,14 @@ public class LoadBalancerTracker extends ZKNodeTracker { } /** - * Set the balancer on/off - * @param balancerOn - * @throws KeeperException + * Set the balancer on/off. + * + * @param balancerOn true if the balancher should be on, false otherwise + * @throws KeeperException if a ZooKeeper operation fails */ public void setBalancerOn(boolean balancerOn) throws KeeperException { - byte [] upData = toByteArray(balancerOn); + byte [] upData = toByteArray(balancerOn); + try { ZKUtil.setData(watcher, watcher.znodePaths.balancerZNode, upData); } catch(KeeperException.NoNodeException nne) { diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java index 85668ad18b7..630eb3e6c05 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java @@ -23,14 +23,15 @@ import java.io.InterruptedIOException; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.ServerName; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; +import org.apache.yetus.audience.InterfaceAudience; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.data.Stat; + +import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.data.Stat; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException; /** * Manages the location of the current active Master for the RegionServer. @@ -138,12 +139,12 @@ public class MasterAddressTracker extends ZKNodeTracker { * instance of this tracker in your context. * @param zkw ZKWatcher to use * @return ServerName stored in the the master address znode or null if no - * znode present. - * @throws KeeperException - * @throws IOException + * znode present. + * @throws KeeperException if a ZooKeeper operation fails + * @throws IOException if the address of the ZooKeeper master cannot be retrieved */ public static ServerName getMasterAddress(final ZKWatcher zkw) - throws KeeperException, IOException { + throws KeeperException, IOException { byte [] data; try { data = ZKUtil.getData(zkw, zkw.znodePaths.masterAddressZNode); @@ -169,13 +170,12 @@ public class MasterAddressTracker extends ZKNodeTracker { * instance of this tracker in your context. * @param zkw ZKWatcher to use * @return master info port in the the master address znode or null if no - * znode present. - * // TODO can't return null for 'int' return type. non-static verison returns 0 - * @throws KeeperException - * @throws IOException + * znode present. + * // TODO can't return null for 'int' return type. non-static verison returns 0 + * @throws KeeperException if a ZooKeeper operation fails + * @throws IOException if the address of the ZooKeeper master cannot be retrieved */ - public static int getMasterInfoPort(final ZKWatcher zkw) throws KeeperException, - IOException { + public static int getMasterInfoPort(final ZKWatcher zkw) throws KeeperException, IOException { byte[] data; try { data = ZKUtil.getData(zkw, zkw.znodePaths.masterAddressZNode); @@ -201,10 +201,10 @@ public class MasterAddressTracker extends ZKNodeTracker { * path. * @param zkw The ZKWatcher to use. * @param znode Where to create the znode; could be at the top level or it - * could be under backup masters + * could be under backup masters * @param master ServerName of the current master must not be null. * @return true if node created, false if not; a watch is set in both cases - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static boolean setMasterAddress(final ZKWatcher zkw, final String znode, final ServerName master, int infoPort) @@ -223,7 +223,7 @@ public class MasterAddressTracker extends ZKNodeTracker { /** * @param sn must not be null * @return Content of the master znode as a serialized pb with the pb - * magic as prefix. + * magic as prefix. */ static byte[] toByteArray(final ServerName sn, int infoPort) { ZooKeeperProtos.Master.Builder mbuilder = ZooKeeperProtos.Master.newBuilder(); @@ -240,7 +240,7 @@ public class MasterAddressTracker extends ZKNodeTracker { /** * @param data zookeeper data. may be null * @return pb object of master, null if no active master - * @throws DeserializationException + * @throws DeserializationException if the parsing fails */ public static ZooKeeperProtos.Master parse(byte[] data) throws DeserializationException { if (data == null) { diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java index 43c79357947..6e231886ade 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java @@ -99,9 +99,10 @@ public class MetaTableLocator { } /** + * Gets the meta regions and their locations for the given path and replica ID. * - * @param zkw - * @param replicaId + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param replicaId the ID of the replica * @return meta table regions and their locations. */ public List> getMetaRegionsAndLocations(ZKWatcher zkw, @@ -114,6 +115,8 @@ public class MetaTableLocator { } /** + * Gets the meta regions for the given path with the default replica ID. + * * @param zkw ZooKeeper watcher to be used * @return List of meta regions */ @@ -122,9 +125,10 @@ public class MetaTableLocator { } /** + * Gets the meta regions for the given path and replica ID. * - * @param zkw - * @param replicaId + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param replicaId the ID of the replica * @return List of meta regions */ public List getMetaRegions(ZKWatcher zkw, int replicaId) { @@ -133,9 +137,11 @@ public class MetaTableLocator { return getListOfRegionInfos(result); } - private List getListOfRegionInfos( - final List> pairs) { - if (pairs == null || pairs.isEmpty()) return Collections.EMPTY_LIST; + private List getListOfRegionInfos(final List> pairs) { + if (pairs == null || pairs.isEmpty()) { + return Collections.EMPTY_LIST; + } + List result = new ArrayList<>(pairs.size()); for (Pair pair: pairs) { result.add(pair.getFirst()); @@ -159,8 +165,8 @@ public class MetaTableLocator { /** * Gets the meta region location, if available. Does not block. - * @param zkw - * @param replicaId + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param replicaId the ID of the replica * @return server name */ public ServerName getMetaRegionLocation(final ZKWatcher zkw, int replicaId) { @@ -177,12 +183,13 @@ public class MetaTableLocator { * specified timeout if not immediately available. * Given the zookeeper notification could be delayed, we will try to * get the latest data. - * @param zkw + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation * @param timeout maximum time to wait, in millis * @return server name for server hosting meta region formatted as per * {@link ServerName}, or null if none available * @throws InterruptedException if interrupted while waiting - * @throws NotAllMetaRegionsOnlineException + * @throws NotAllMetaRegionsOnlineException if a meta or root region is not online */ public ServerName waitMetaRegionLocation(ZKWatcher zkw, long timeout) throws InterruptedException, NotAllMetaRegionsOnlineException { @@ -190,17 +197,17 @@ public class MetaTableLocator { } /** - * Gets the meta region location, if available, and waits for up to the - * specified timeout if not immediately available. - * Given the zookeeper notification could be delayed, we will try to + * Gets the meta region location, if available, and waits for up to the specified timeout if not + * immediately available. Given the zookeeper notification could be delayed, we will try to * get the latest data. - * @param zkw - * @param replicaId + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param replicaId the ID of the replica * @param timeout maximum time to wait, in millis * @return server name for server hosting meta region formatted as per * {@link ServerName}, or null if none available - * @throws InterruptedException - * @throws NotAllMetaRegionsOnlineException + * @throws InterruptedException if waiting for the socket operation fails + * @throws NotAllMetaRegionsOnlineException if a meta or root region is not online */ public ServerName waitMetaRegionLocation(ZKWatcher zkw, int replicaId, long timeout) throws InterruptedException, NotAllMetaRegionsOnlineException { @@ -234,7 +241,10 @@ public class MetaTableLocator { long startTime = System.currentTimeMillis(); while (!stopped) { try { - if (waitMetaRegionLocation(zkw, 100) != null) break; + if (waitMetaRegionLocation(zkw, 100) != null) { + break; + } + long sleepTime = System.currentTimeMillis() - startTime; // +1 in case sleepTime=0 if ((sleepTime + 1) % 10000 == 0) { @@ -251,33 +261,33 @@ public class MetaTableLocator { /** * Verify hbase:meta is deployed and accessible. - * @param hConnection - * @param zkw + * + * @param hConnection the connection to use + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation * @param timeout How long to wait on zk for meta address (passed through to - * the internal call to {@link #getMetaServerConnection}. + * the internal call to {@link #getMetaServerConnection}. * @return True if the hbase:meta location is healthy. - * @throws java.io.IOException - * @throws InterruptedException + * @throws IOException if the number of retries for getting the connection is exceeded + * @throws InterruptedException if waiting for the socket operation fails */ - public boolean verifyMetaRegionLocation(ClusterConnection hConnection, - ZKWatcher zkw, final long timeout) - throws InterruptedException, IOException { + public boolean verifyMetaRegionLocation(ClusterConnection hConnection, ZKWatcher zkw, + final long timeout) throws InterruptedException, IOException { return verifyMetaRegionLocation(hConnection, zkw, timeout, RegionInfo.DEFAULT_REPLICA_ID); } /** * Verify hbase:meta is deployed and accessible. - * @param connection - * @param zkw + * + * @param connection the connection to use + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation * @param timeout How long to wait on zk for meta address (passed through to - * @param replicaId + * @param replicaId the ID of the replica * @return True if the hbase:meta location is healthy. - * @throws InterruptedException - * @throws IOException + * @throws InterruptedException if waiting for the socket operation fails + * @throws IOException if the number of retries for getting the connection is exceeded */ - public boolean verifyMetaRegionLocation(ClusterConnection connection, - ZKWatcher zkw, final long timeout, int replicaId) - throws InterruptedException, IOException { + public boolean verifyMetaRegionLocation(ClusterConnection connection, ZKWatcher zkw, + final long timeout, int replicaId) throws InterruptedException, IOException { AdminProtos.AdminService.BlockingInterface service = null; try { service = getMetaServerConnection(connection, zkw, timeout, replicaId); @@ -299,12 +309,10 @@ public class MetaTableLocator { * Verify we can connect to hostingServer and that its carrying * regionName. * @param hostingServer Interface to the server hosting regionName - * @param address The servername that goes with the metaServer - * Interface. Used logging. + * @param address The servername that goes with the metaServer interface. + * Used logging. * @param regionName The regionname we are interested in. - * @return True if we were able to verify the region located at other side of - * the Interface. - * @throws IOException + * @return True if we were able to verify the region located at other side of the interface. */ // TODO: We should be able to get the ServerName from the AdminProtocol // rather than have to pass it in. Its made awkward by the fact that the @@ -312,8 +320,7 @@ public class MetaTableLocator { // to be fixed to go to a local method or to a cache before we can do this. private boolean verifyRegionLocation(final ClusterConnection connection, AdminService.BlockingInterface hostingServer, final ServerName address, - final byte [] regionName) - throws IOException { + final byte [] regionName) { if (hostingServer == null) { LOG.info("Passed hostingServer is null"); return false; @@ -347,34 +354,33 @@ public class MetaTableLocator { } /** - * Gets a connection to the server hosting meta, as reported by ZooKeeper, - * waiting up to the specified timeout for availability. + * Gets a connection to the server hosting meta, as reported by ZooKeeper, waiting up to the + * specified timeout for availability. + * *

WARNING: Does not retry. Use an {@link org.apache.hadoop.hbase.client.HTable} instead. - * @param connection - * @param zkw + * + * @param connection the connection to use + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation * @param timeout How long to wait on meta location - * @param replicaId + * @param replicaId the ID of the replica * @return connection to server hosting meta - * @throws InterruptedException - * @throws NotAllMetaRegionsOnlineException if timed out waiting - * @throws IOException + * @throws InterruptedException if waiting for the socket operation fails + * @throws IOException if the number of retries for getting the connection is exceeded */ private AdminService.BlockingInterface getMetaServerConnection(ClusterConnection connection, - ZKWatcher zkw, long timeout, int replicaId) - throws InterruptedException, NotAllMetaRegionsOnlineException, IOException { + ZKWatcher zkw, long timeout, int replicaId) throws InterruptedException, IOException { return getCachedConnection(connection, waitMetaRegionLocation(zkw, replicaId, timeout)); } /** * @param sn ServerName to get a connection against. * @return The AdminProtocol we got when we connected to sn - * May have come from cache, may not be good, may have been setup by this - * invocation, or may be null. - * @throws IOException + * May have come from cache, may not be good, may have been setup by this invocation, or + * may be null. + * @throws IOException if the number of retries for getting the connection is exceeded */ private static AdminService.BlockingInterface getCachedConnection(ClusterConnection connection, - ServerName sn) - throws IOException { + ServerName sn) throws IOException { if (sn == null) { return null; } @@ -430,16 +436,16 @@ public class MetaTableLocator { } /** - * Sets the location of hbase:meta in ZooKeeper to the - * specified server address. - * @param zookeeper - * @param serverName - * @param replicaId - * @param state - * @throws KeeperException + * Sets the location of hbase:meta in ZooKeeper to the specified server address. + * @param zookeeper reference to the {@link ZKWatcher} which also contains configuration and + * operation + * @param serverName the name of the server + * @param replicaId the ID of the replica + * @param state the state of the region + * @throws KeeperException if a ZooKeeper operation fails */ - public static void setMetaLocation(ZKWatcher zookeeper, - ServerName serverName, int replicaId, RegionState.State state) throws KeeperException { + public static void setMetaLocation(ZKWatcher zookeeper, ServerName serverName, int replicaId, + RegionState.State state) throws KeeperException { if (serverName == null) { LOG.warn("Tried to set null ServerName in hbase:meta; skipping -- ServerName required"); return; @@ -476,13 +482,14 @@ public class MetaTableLocator { /** * Load the meta region state from the meta server ZNode. - * @param zkw - * @param replicaId + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param replicaId the ID of the replica * @return regionstate - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static RegionState getMetaRegionState(ZKWatcher zkw, int replicaId) - throws KeeperException { + throws KeeperException { RegionState.State state = RegionState.State.OPEN; ServerName serverName = null; try { @@ -491,8 +498,8 @@ public class MetaTableLocator { try { int prefixLen = ProtobufUtil.lengthOfPBMagic(); ZooKeeperProtos.MetaRegionServer rl = - ZooKeeperProtos.MetaRegionServer.PARSER.parseFrom - (data, prefixLen, data.length - prefixLen); + ZooKeeperProtos.MetaRegionServer.PARSER.parseFrom(data, prefixLen, + data.length - prefixLen); if (rl.hasState()) { state = RegionState.State.convert(rl.getState()); } @@ -545,24 +552,28 @@ public class MetaTableLocator { } } /** - * Wait until the primary meta region is available. Get the secondary - * locations as well but don't block for those. - * @param zkw - * @param timeout - * @param conf + * Wait until the primary meta region is available. Get the secondary locations as well but don't + * block for those. + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param timeout maximum time to wait in millis + * @param conf the {@link Configuration} to use * @return ServerName or null if we timed out. - * @throws InterruptedException + * @throws InterruptedException if waiting for the socket operation fails */ - public List blockUntilAvailable(final ZKWatcher zkw, - final long timeout, Configuration conf) - throws InterruptedException { + public List blockUntilAvailable(final ZKWatcher zkw, final long timeout, + Configuration conf) throws InterruptedException { int numReplicasConfigured = 1; List servers = new ArrayList<>(); // Make the blocking call first so that we do the wait to know // the znodes are all in place or timeout. ServerName server = blockUntilAvailable(zkw, timeout); - if (server == null) return null; + + if (server == null) { + return null; + } + servers.add(server); try { @@ -583,27 +594,32 @@ public class MetaTableLocator { * @param zkw zookeeper connection to use * @param timeout maximum time to wait, in millis * @return ServerName or null if we timed out. - * @throws InterruptedException + * @throws InterruptedException if waiting for the socket operation fails */ - public ServerName blockUntilAvailable(final ZKWatcher zkw, - final long timeout) - throws InterruptedException { + public ServerName blockUntilAvailable(final ZKWatcher zkw, final long timeout) + throws InterruptedException { return blockUntilAvailable(zkw, RegionInfo.DEFAULT_REPLICA_ID, timeout); } /** * Wait until the meta region is available and is not in transition. - * @param zkw - * @param replicaId - * @param timeout + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and constants + * @param replicaId the ID of the replica + * @param timeout maximum time to wait in millis * @return ServerName or null if we timed out. - * @throws InterruptedException + * @throws InterruptedException if waiting for the socket operation fails */ - public ServerName blockUntilAvailable(final ZKWatcher zkw, int replicaId, - final long timeout) - throws InterruptedException { - if (timeout < 0) throw new IllegalArgumentException(); - if (zkw == null) throw new IllegalArgumentException(); + public ServerName blockUntilAvailable(final ZKWatcher zkw, int replicaId, final long timeout) + throws InterruptedException { + if (timeout < 0) { + throw new IllegalArgumentException(); + } + + if (zkw == null) { + throw new IllegalArgumentException(); + } + long startTime = System.currentTimeMillis(); ServerName sn = null; while (true) { diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java index cb8681c826e..a4acda2c2da 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java @@ -20,9 +20,9 @@ package org.apache.hadoop.hbase.zookeeper; import java.io.BufferedReader; import java.io.File; -import java.io.InterruptedIOException; import java.io.IOException; import java.io.InputStreamReader; +import java.io.InterruptedIOException; import java.io.OutputStream; import java.io.Reader; import java.net.BindException; @@ -34,9 +34,9 @@ import java.util.Random; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HConstants; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.server.NIOServerCnxnFactory; import org.apache.zookeeper.server.ZooKeeperServer; import org.apache.zookeeper.server.persistence.FileTxnLog; @@ -187,17 +187,18 @@ public class MiniZooKeeperCluster { } /** - * @param baseDir - * @param numZooKeeperServers - * @return ClientPort server bound to, -1 if there was a - * binding problem and we couldn't pick another port. - * @throws IOException - * @throws InterruptedException + * @param baseDir the base directory to use + * @param numZooKeeperServers the number of ZooKeeper servers + * @return ClientPort server bound to, -1 if there was a binding problem and we couldn't pick + * another port. + * @throws IOException if an operation fails during the startup + * @throws InterruptedException if the startup fails */ public int startup(File baseDir, int numZooKeeperServers) throws IOException, - InterruptedException { - if (numZooKeeperServers <= 0) + InterruptedException { + if (numZooKeeperServers <= 0) { return -1; + } setupTestEnv(); shutdown(); @@ -226,15 +227,18 @@ public class MiniZooKeeperCluster { ZooKeeperServer server = new ZooKeeperServer(dir, dir, tickTimeToUse); // Setting {min,max}SessionTimeout defaults to be the same as in Zookeeper - server.setMinSessionTimeout(configuration.getInt("hbase.zookeeper.property.minSessionTimeout", -1)); - server.setMaxSessionTimeout(configuration.getInt("hbase.zookeeper.property.maxSessionTimeout", -1)); + server.setMinSessionTimeout(configuration.getInt( + "hbase.zookeeper.property.minSessionTimeout", -1)); + server.setMaxSessionTimeout(configuration.getInt( + "hbase.zookeeper.property.maxSessionTimeout", -1)); NIOServerCnxnFactory standaloneServerFactory; while (true) { try { standaloneServerFactory = new NIOServerCnxnFactory(); standaloneServerFactory.configure( new InetSocketAddress(currentClientPort), - configuration.getInt(HConstants.ZOOKEEPER_MAX_CLIENT_CNXNS, HConstants.DEFAULT_ZOOKEPER_MAX_CLIENT_CNXNS)); + configuration.getInt(HConstants.ZOOKEEPER_MAX_CLIENT_CNXNS, + HConstants.DEFAULT_ZOOKEPER_MAX_CLIENT_CNXNS)); } catch (BindException e) { LOG.debug("Failed binding ZK Server to client port: " + currentClientPort, e); @@ -290,7 +294,7 @@ public class MiniZooKeeperCluster { } /** - * @throws IOException + * @throws IOException if waiting for the shutdown of a server fails */ public void shutdown() throws IOException { // shut down all the zk servers @@ -321,13 +325,12 @@ public class MiniZooKeeperCluster { } } - /**@return clientPort return clientPort if there is another ZK backup can run + /** + * @return clientPort return clientPort if there is another ZK backup can run * when killing the current active; return -1, if there is no backups. - * @throws IOException - * @throws InterruptedException + * @throws IOException if waiting for the shutdown of a server fails */ - public int killCurrentActiveZooKeeperServer() throws IOException, - InterruptedException { + public int killCurrentActiveZooKeeperServer() throws IOException, InterruptedException { if (!started || activeZKServerIndex < 0) { return -1; } @@ -363,14 +366,12 @@ public class MiniZooKeeperCluster { } /** - * Kill one back up ZK servers - * @throws IOException - * @throws InterruptedException + * Kill one back up ZK servers. + * + * @throws IOException if waiting for the shutdown of a server fails */ - public void killOneBackupZooKeeperServer() throws IOException, - InterruptedException { - if (!started || activeZKServerIndex < 0 || - standaloneServerFactoryList.size() <= 1) { + public void killOneBackupZooKeeperServer() throws IOException, InterruptedException { + if (!started || activeZKServerIndex < 0 || standaloneServerFactoryList.size() <= 1) { return ; } diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java index d6c11af7576..4b88a5de079 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java @@ -26,13 +26,13 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hbase.trace.TraceUtil; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.RetryCounter; import org.apache.hadoop.hbase.util.RetryCounterFactory; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.hadoop.hbase.trace.TraceUtil; import org.apache.htrace.core.TraceScope; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; @@ -113,14 +113,19 @@ public class RecoverableZooKeeper { this.sessionTimeout = sessionTimeout; this.quorumServers = quorumServers; this.metrics = new ZKMetrics(); - try {checkZk();} catch (Exception x) {/* ignore */} + + try { + checkZk(); + } catch (Exception x) { + /* ignore */ + } } /** * Try to create a ZooKeeper connection. Turns any exception encountered into a * KeeperException.OperationTimeoutException so it can retried. * @return The created ZooKeeper connection object - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ protected synchronized ZooKeeper checkZk() throws KeeperException { if (this.zk == null) { @@ -161,7 +166,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); checkZk().delete(path, version); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -205,7 +211,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); Stat nodeStat = checkZk().exists(path, watcher); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodeStat; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -239,7 +246,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); Stat nodeStat = checkZk().exists(path, watch); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodeStat; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -285,7 +293,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); List children = checkZk().getChildren(path, watcher); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return children; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -320,7 +329,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); List children = checkZk().getChildren(path, watch); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return children; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -355,7 +365,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); byte[] revData = checkZk().getData(path, watcher, stat); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return ZKMetadata.removeMetaData(revData); } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -390,7 +401,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); byte[] revData = checkZk().getData(path, watch, stat); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return ZKMetadata.removeMetaData(revData); } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -430,7 +442,8 @@ public class RecoverableZooKeeper { try { startTime = EnvironmentEdgeManager.currentTime(); Stat nodeStat = checkZk().setData(path, newData, version); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodeStat; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -450,7 +463,8 @@ public class RecoverableZooKeeper { Stat stat = new Stat(); startTime = EnvironmentEdgeManager.currentTime(); byte[] revData = checkZk().getData(path, false, stat); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); if(Bytes.compareTo(revData, newData) == 0) { // the bad version is caused by previous successful setData return stat; @@ -484,7 +498,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); List nodeACL = checkZk().getACL(path, stat); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodeACL; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -519,7 +534,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); Stat nodeStat = checkZk().setACL(path, acls, version); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodeStat; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -587,7 +603,8 @@ public class RecoverableZooKeeper { try { startTime = EnvironmentEdgeManager.currentTime(); String nodePath = checkZk().create(path, data, acl, createMode); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodePath; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -599,7 +616,8 @@ public class RecoverableZooKeeper { // so we read the node and compare. startTime = EnvironmentEdgeManager.currentTime(); byte[] currentData = checkZk().getData(path, false, null); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); if (currentData != null && Bytes.compareTo(currentData, data) == 0) { // We successfully created a non-sequential node @@ -649,7 +667,8 @@ public class RecoverableZooKeeper { first = false; long startTime = EnvironmentEdgeManager.currentTime(); String nodePath = checkZk().create(newPath, data, acl, createMode); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return nodePath; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -674,9 +693,10 @@ public class RecoverableZooKeeper { * Convert Iterable of {@link org.apache.zookeeper.Op} we got into the ZooKeeper.Op * instances to actually pass to multi (need to do this in order to appendMetaData). */ - private Iterable prepareZKMulti(Iterable ops) - throws UnsupportedOperationException { - if(ops == null) return null; + private Iterable prepareZKMulti(Iterable ops) throws UnsupportedOperationException { + if(ops == null) { + return null; + } List preparedOps = new LinkedList<>(); for (Op op : ops) { @@ -689,8 +709,8 @@ public class RecoverableZooKeeper { preparedOps.add(op); } else if (op.getType() == ZooDefs.OpCode.setData) { SetDataRequest setData = (SetDataRequest)op.toRequestRecord(); - preparedOps.add(Op.setData(setData.getPath(), ZKMetadata.appendMetaData(id, setData.getData()), - setData.getVersion())); + preparedOps.add(Op.setData(setData.getPath(), + ZKMetadata.appendMetaData(id, setData.getData()), setData.getVersion())); } else { throw new UnsupportedOperationException("Unexpected ZKOp type: " + op.getClass().getName()); } @@ -710,7 +730,8 @@ public class RecoverableZooKeeper { try { long startTime = EnvironmentEdgeManager.currentTime(); List opResults = checkZk().multi(multiOps); - this.metrics.registerWriteOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerWriteOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); return opResults; } catch (KeeperException e) { this.metrics.registerFailedZKCall(); @@ -741,13 +762,15 @@ public class RecoverableZooKeeper { String nodePrefix = path.substring(lastSlashIdx+1); long startTime = EnvironmentEdgeManager.currentTime(); List nodes = checkZk().getChildren(parent, false); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); List matching = filterByPrefix(nodes, nodePrefix); for (String node : matching) { String nodePath = parent + "/" + node; startTime = EnvironmentEdgeManager.currentTime(); Stat stat = checkZk().exists(nodePath, false); - this.metrics.registerReadOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerReadOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); if (stat != null) { return nodePath; } @@ -760,7 +783,9 @@ public class RecoverableZooKeeper { } public synchronized void close() throws InterruptedException { - if (zk != null) zk.close(); + if (zk != null) { + zk.close(); + } } public synchronized States getState() { @@ -778,7 +803,8 @@ public class RecoverableZooKeeper { public void sync(String path, AsyncCallback.VoidCallback cb, Object ctx) throws KeeperException { long startTime = EnvironmentEdgeManager.currentTime(); checkZk().sync(path, cb, null); - this.metrics.registerSyncOperationLatency(Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); + this.metrics.registerSyncOperationLatency( + Math.min(EnvironmentEdgeManager.currentTime() - startTime, 1)); } /** diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.java index 93545ee74fc..58d405d5576 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.java @@ -18,16 +18,17 @@ package org.apache.hadoop.hbase.zookeeper; +import java.io.IOException; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.exceptions.DeserializationException; -import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; -import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionNormalizerProtos; import org.apache.hadoop.hbase.util.Bytes; import org.apache.zookeeper.KeeperException; -import java.io.IOException; +import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; +import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionNormalizerProtos; /** * Tracks region normalizer state up in ZK @@ -35,8 +36,7 @@ import java.io.IOException; public class RegionNormalizerTracker extends ZKNodeTracker { private static final Log LOG = LogFactory.getLog(RegionNormalizerTracker.class); - public RegionNormalizerTracker(ZKWatcher watcher, - Abortable abortable) { + public RegionNormalizerTracker(ZKWatcher watcher, Abortable abortable) { super(watcher, watcher.znodePaths.regionNormalizerZNode, abortable); } @@ -59,7 +59,7 @@ public class RegionNormalizerTracker extends ZKNodeTracker { /** * Set region normalizer on/off * @param normalizerOn whether normalizer should be on or off - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public void setNormalizerOn(boolean normalizerOn) throws KeeperException { byte [] upData = toByteArray(normalizerOn); diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAclReset.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAclReset.java index 4150f5483fa..c0f33e588b8 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAclReset.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAclReset.java @@ -26,9 +26,9 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.hbase.HBaseConfiguration; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.ZooKeeper; diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKClusterId.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKClusterId.java index 2f2b0364985..be2529b054f 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKClusterId.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKClusterId.java @@ -23,8 +23,8 @@ import java.util.UUID; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.ClusterId; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; /** @@ -90,7 +90,7 @@ public class ZKClusterId { * Get the UUID for the provided ZK watcher. Doesn't handle any ZK exceptions * @param zkw watcher connected to an ensemble * @return the UUID read from zookeeper - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static UUID getUUIDForCluster(ZKWatcher zkw) throws KeeperException { String uuid = readClusterIdZNode(zkw); diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.java index 9ae3e1cba6b..25310bd50cd 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.java @@ -23,8 +23,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.Stoppable; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; /** diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMainServer.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMainServer.java index 2db83eb615a..934476b43da 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMainServer.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMainServer.java @@ -76,22 +76,26 @@ public class ZKMainServer { } /** - * @param args + * @param args the arguments to check * @return True if argument strings have a '-server' in them. */ - private static boolean hasServer(final String args[]) { + private static boolean hasServer(final String[] args) { return args.length > 0 && args[0].equals(SERVER_ARG); } /** - * @param args + * @param args the arguments to check for command-line arguments * @return True if command-line arguments were passed. */ - private static boolean hasCommandLineArguments(final String args[]) { + private static boolean hasCommandLineArguments(final String[] args) { if (hasServer(args)) { - if (args.length < 2) throw new IllegalStateException("-server param but no value"); + if (args.length < 2) { + throw new IllegalStateException("-server param but no value"); + } + return args.length > 2; } + return args.length > 0; } @@ -99,7 +103,7 @@ public class ZKMainServer { * Run the tool. * @param args Command line arguments. First arg is path to zookeepers file. */ - public static void main(String args[]) throws Exception { + public static void main(String[] args) throws Exception { String [] newArgs = args; if (!hasServer(args)) { // Add the zk ensemble from configuration if none passed on command-line. diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.java index 8ce41e3a508..2dd5df5080a 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.java @@ -53,9 +53,10 @@ public abstract class ZKNodeTracker extends ZKListener { * *

After construction, use {@link #start} to kick off tracking. * - * @param watcher - * @param node - * @param abortable + * @param watcher reference to the {@link ZKWatcher} which also contains configuration and + * constants + * @param node path of the node being tracked + * @param abortable used to abort if a fatal error occurs */ public ZKNodeTracker(ZKWatcher watcher, String node, Abortable abortable) { @@ -109,14 +110,17 @@ public abstract class ZKNodeTracker extends ZKListener { * Gets the data of the node, blocking until the node is available or the * specified timeout has elapsed. * - * @param timeout maximum time to wait for the node data to be available, - * n milliseconds. Pass 0 for no timeout. + * @param timeout maximum time to wait for the node data to be available, n milliseconds. Pass 0 + * for no timeout. * @return data of the node * @throws InterruptedException if the waiting thread is interrupted */ public synchronized byte [] blockUntilAvailable(long timeout, boolean refresh) - throws InterruptedException { - if (timeout < 0) throw new IllegalArgumentException(); + throws InterruptedException { + if (timeout < 0) { + throw new IllegalArgumentException(); + } + boolean notimeout = timeout == 0; long startTime = System.currentTimeMillis(); long remaining = timeout; @@ -137,9 +141,8 @@ public abstract class ZKNodeTracker extends ZKListener { try { nodeExistsChecked = (ZKUtil.checkExists(watcher, node) != -1); } catch (KeeperException e) { - LOG.warn( - "Got exception while trying to check existence in ZooKeeper" + - " of the node: "+node+", retrying if timeout not reached",e ); + LOG.warn("Got exception while trying to check existence in ZooKeeper" + + " of the node: " + node + ", retrying if timeout not reached", e); } // It did not exists, and now it does. @@ -188,7 +191,10 @@ public abstract class ZKNodeTracker extends ZKListener { @Override public synchronized void nodeCreated(String path) { - if (!path.equals(node)) return; + if (!path.equals(node)) { + return; + } + try { byte [] data = ZKUtil.getDataAndWatch(watcher, node); if (data != null) { diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKServerTool.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKServerTool.java index 8116c2366f2..dd71dee5b8c 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKServerTool.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKServerTool.java @@ -19,6 +19,9 @@ package org.apache.hadoop.hbase.zookeeper; +import java.util.LinkedList; +import java.util.List; + import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HBaseInterfaceAudience; @@ -26,15 +29,15 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.ServerName; import org.apache.yetus.audience.InterfaceAudience; -import java.util.LinkedList; -import java.util.List; - /** * Tool for reading ZooKeeper servers from HBase XML configuration and producing * a line-by-line list for use by bash scripts. */ @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS) -public class ZKServerTool { +public final class ZKServerTool { + private ZKServerTool() { + } + public static ServerName[] readZKNodes(Configuration conf) { List hosts = new LinkedList<>(); String quorum = conf.get(HConstants.ZOOKEEPER_QUORUM, HConstants.LOCALHOST); @@ -56,7 +59,7 @@ public class ZKServerTool { * Run the tool. * @param args Command line arguments. */ - public static void main(String args[]) { + public static void main(String[] args) { for(ServerName server: readZKNodes(HBaseConfiguration.create())) { // bin/zookeeper.sh relies on the "ZK host" string for grepping which is case sensitive. System.out.println("ZK host: " + server.getHostname()); diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java index 33cc43eab1f..da45f9dc92e 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java @@ -30,12 +30,16 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.yetus.audience.InterfaceAudience; /** - * Common methods and attributes used by SplitLogManager and SplitLogWorker running distributed splitting of WAL logs. + * Common methods and attributes used by SplitLogManager and SplitLogWorker running distributed + * splitting of WAL logs. */ @InterfaceAudience.Private -public class ZKSplitLog { +public final class ZKSplitLog { private static final Log LOG = LogFactory.getLog(ZKSplitLog.class); + private ZKSplitLog() { + } + /** * Gets the full path node name for the log file being split. * This method will url encode the filename. @@ -80,7 +84,9 @@ public class ZKSplitLog { } /** - * @param zkw + * Checks if the given path represents a rescan node. + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and constants * @param path the absolute path, starts with '/' * @return whether the path represents a rescan node */ diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java index 859ab48dbfd..a4edbb3507e 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java @@ -45,12 +45,8 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.AuthUtil; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.security.Superusers; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException; -import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; -import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp.CreateAndFailSilent; @@ -59,6 +55,7 @@ import org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp.SetData; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.authentication.util.KerberosUtil; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; @@ -77,6 +74,10 @@ import org.apache.zookeeper.proto.DeleteRequest; import org.apache.zookeeper.proto.SetDataRequest; import org.apache.zookeeper.server.ZooKeeperSaslServer; +import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException; +import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos; + /** * Internal HBase utility class for ZooKeeper. * @@ -87,11 +88,14 @@ import org.apache.zookeeper.server.ZooKeeperSaslServer; * If ZK is required for the operation, the server will need to be aborted. */ @InterfaceAudience.Private -public class ZKUtil { +public final class ZKUtil { private static final Log LOG = LogFactory.getLog(ZKUtil.class); private static int zkDumpConnectionTimeOut; + private ZKUtil() { + } + /** * Creates a new connection to ZooKeeper, pulling settings and ensemble config * from the specified configuration object using methods from {@link ZKConfig}. @@ -198,13 +202,15 @@ public class ZKUtil { String userNameKey, String hostname, String loginContextProperty, String loginContextName) throws IOException { - if (!isSecureZooKeeper(conf)) + if (!isSecureZooKeeper(conf)) { return; + } // User has specified a jaas.conf, keep this one as the good one. // HBASE_OPTS="-Djava.security.auth.login.config=jaas.conf" - if (System.getProperty("java.security.auth.login.config") != null) + if (System.getProperty("java.security.auth.login.config") != null) { return; + } // No keytab specified, no auth String keytabFilename = conf.get(keytabFileKey); @@ -295,7 +301,11 @@ public class ZKUtil { KEYTAB_KERBEROS_OPTIONS.put("useTicketCache", useTicketCache ? "true" : "false"); return KEYTAB_KERBEROS_CONF; } - if (baseConfig != null) return baseConfig.getAppConfigurationEntry(appName); + + if (baseConfig != null) { + return baseConfig.getAppConfigurationEntry(appName); + } + return(null); } } @@ -454,7 +464,7 @@ public class ZKUtil { * @param zkw zookeeper reference * @param znode node to get children of and watch * @return list of znode names, null if the node doesn't exist - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static List listChildrenAndWatchThem(ZKWatcher zkw, String znode) throws KeeperException { @@ -544,8 +554,8 @@ public class ZKUtil { try { return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty(); } catch(KeeperException.NoNodeException ke) { - LOG.debug(zkw.prefix("Unable to list children of znode " + znode + " " + - "because node does not exist (not an error)")); + LOG.debug(zkw.prefix("Unable to list children of znode " + znode + + " because node does not exist (not an error)")); return false; } catch (KeeperException e) { LOG.warn(zkw.prefix("Unable to list children of znode " + znode), e); @@ -591,8 +601,8 @@ public class ZKUtil { /** * Get znode data. Does not set a watcher. - * @return ZNode data, null if the node does not exist or if there is an - * error. + * + * @return ZNode data, null if the node does not exist or if there is an error. */ public static byte [] getData(ZKWatcher zkw, String znode) throws KeeperException, InterruptedException { @@ -748,17 +758,16 @@ public class ZKUtil { * Sets no watches under any conditions. * * @param zkw zk reference - * @param znode - * @param data - * @param expectedVersion + * @param znode the path to the ZNode + * @param data the data to store in ZooKeeper + * @param expectedVersion the expected version * @throws KeeperException if unexpected zookeeper exception * @throws KeeperException.BadVersionException if version mismatch * @deprecated Unused */ @Deprecated - public static void updateExistingNodeData(ZKWatcher zkw, String znode, - byte [] data, int expectedVersion) - throws KeeperException { + public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data, + int expectedVersion) throws KeeperException { try { zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion); } catch(InterruptedException ie) { @@ -808,11 +817,10 @@ public class ZKUtil { * @param zkw zk reference * @param znode path of node * @param data data to set for node - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ - public static void createSetData(final ZKWatcher zkw, final String znode, - final byte [] data) - throws KeeperException { + public static void createSetData(final ZKWatcher zkw, final String znode, final byte [] data) + throws KeeperException { if (checkExists(zkw, znode) == -1) { ZKUtil.createWithParents(zkw, znode, data); } else { @@ -1025,9 +1033,8 @@ public class ZKUtil { * @return true name of the newly created znode or null * @throws KeeperException if unexpected zookeeper exception */ - public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, - byte[] data, CreateMode createMode) throws KeeperException { - + public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, byte[] data, + CreateMode createMode) throws KeeperException { String createdZNode = null; try { createdZNode = zkw.getRecoverableZooKeeper().create(znode, data, @@ -1069,7 +1076,8 @@ public class ZKUtil { throw KeeperException.create(KeeperException.Code.SYSTEMERROR, "ZK.exists returned null (i.e.: znode does not exist) for znode=" + znode); } - return stat.getVersion(); + + return stat.getVersion(); } catch (InterruptedException e) { zkw.interruptedException(e); return -1; @@ -1086,8 +1094,8 @@ public class ZKUtil { * @param zkw zk reference * @param znode path of node to create * @param data data of node to create - * @param cb - * @param ctx + * @param cb the callback to use for the creation + * @param ctx the context to use for the creation */ public static void asyncCreate(ZKWatcher zkw, String znode, byte [] data, final AsyncCallback.StringCallback cb, @@ -1232,9 +1240,10 @@ public class ZKUtil { /** * Deletes the specified node. Fails silent if the node does not exist. - * @param zkw - * @param node - * @throws KeeperException + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param node the node to delete + * @throws KeeperException if a ZooKeeper operation fails */ public static void deleteNodeFailSilent(ZKWatcher zkw, String node) throws KeeperException { @@ -1273,7 +1282,7 @@ public class ZKUtil { * Sets no watches. Throws all exceptions besides dealing with deletion of * children. * - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static void deleteChildrenRecursively(ZKWatcher zkw, String node) throws KeeperException { @@ -1506,7 +1515,7 @@ public class ZKUtil { * ZKUtilOp representing createAndFailSilent in ZooKeeper * (attempt to create node, ignore error if already exists) */ - public static class CreateAndFailSilent extends ZKUtilOp { + public static final class CreateAndFailSilent extends ZKUtilOp { private byte [] data; private CreateAndFailSilent(String path, byte [] data) { @@ -1520,8 +1529,12 @@ public class ZKUtil { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof CreateAndFailSilent)) return false; + if (this == o) { + return true; + } + if (!(o instanceof CreateAndFailSilent)) { + return false; + } CreateAndFailSilent op = (CreateAndFailSilent) o; return getPath().equals(op.getPath()) && Arrays.equals(data, op.data); @@ -1538,15 +1551,19 @@ public class ZKUtil { * ZKUtilOp representing deleteNodeFailSilent in ZooKeeper * (attempt to delete node, ignore error if node doesn't exist) */ - public static class DeleteNodeFailSilent extends ZKUtilOp { + public static final class DeleteNodeFailSilent extends ZKUtilOp { private DeleteNodeFailSilent(String path) { super(path); } @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DeleteNodeFailSilent)) return false; + if (this == o) { + return true; + } + if (!(o instanceof DeleteNodeFailSilent)) { + return false; + } return super.equals(o); } @@ -1560,7 +1577,7 @@ public class ZKUtil { /** * ZKUtilOp representing setData in ZooKeeper */ - public static class SetData extends ZKUtilOp { + public static final class SetData extends ZKUtilOp { private byte [] data; private SetData(String path, byte [] data) { @@ -1574,8 +1591,12 @@ public class ZKUtil { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof SetData)) return false; + if (this == o) { + return true; + } + if (!(o instanceof SetData)) { + return false; + } SetData op = (SetData) o; return getPath().equals(op.getPath()) && Arrays.equals(data, op.data); @@ -1592,9 +1613,10 @@ public class ZKUtil { /** * Convert from ZKUtilOp to ZKOp */ - private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) - throws UnsupportedOperationException { - if(op == null) return null; + private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) throws UnsupportedOperationException { + if(op == null) { + return null; + } if (op instanceof CreateAndFailSilent) { CreateAndFailSilent cafs = (CreateAndFailSilent)op; @@ -1629,14 +1651,16 @@ public class ZKUtil { * In this case, if the previous conditions hold, the commands are run sequentially, which should * result in the correct final state, but means that the operations will not run atomically. * - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public static void multiOrSequential(ZKWatcher zkw, List ops, boolean runSequentialOnMultiFailure) throws KeeperException { if (zkw.getConfiguration().get("hbase.zookeeper.useMulti") != null) { LOG.warn("hbase.zookeeper.useMulti is deprecated. Default to true always."); } - if (ops == null) return; + if (ops == null) { + return; + } List zkOps = new LinkedList<>(); for (ZKUtilOp op : ops) { @@ -1646,21 +1670,21 @@ public class ZKUtil { zkw.getRecoverableZooKeeper().multi(zkOps); } catch (KeeperException ke) { switch (ke.code()) { - case NODEEXISTS: - case NONODE: - case BADVERSION: - case NOAUTH: - // if we get an exception that could be solved by running sequentially - // (and the client asked us to), then break out and run sequentially - if (runSequentialOnMultiFailure) { - LOG.info("On call to ZK.multi, received exception: " + ke.toString() + "." - + " Attempting to run operations sequentially because" - + " runSequentialOnMultiFailure is: " + runSequentialOnMultiFailure + "."); - processSequentially(zkw, ops); - break; - } - default: - throw ke; + case NODEEXISTS: + case NONODE: + case BADVERSION: + case NOAUTH: + // if we get an exception that could be solved by running sequentially + // (and the client asked us to), then break out and run sequentially + if (runSequentialOnMultiFailure) { + LOG.info("On call to ZK.multi, received exception: " + ke.toString() + "." + + " Attempting to run operations sequentially because" + + " runSequentialOnMultiFailure is: " + runSequentialOnMultiFailure + "."); + processSequentially(zkw, ops); + break; + } + default: + throw ke; } } catch (InterruptedException ie) { zkw.interruptedException(ie); @@ -1748,14 +1772,19 @@ public class ZKUtil { /** * Appends replication znodes to the passed StringBuilder. - * @param zkw - * @param sb - * @throws KeeperException + * + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation + * @param sb the {@link StringBuilder} to append to + * @throws KeeperException if a ZooKeeper operation fails */ private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb) throws KeeperException { String replicationZnode = zkw.znodePaths.replicationZNode; - if (ZKUtil.checkExists(zkw, replicationZnode) == -1) return; + + if (ZKUtil.checkExists(zkw, replicationZnode) == -1) { + return; + } + // do a ls -r on this znode sb.append("\n").append(replicationZnode).append(": "); List children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode); @@ -1790,7 +1819,7 @@ public class ZKUtil { /** * Returns a string with replication znodes and position of the replication log - * @param zkw + * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation * @return aq string of replication znodes and log positions */ public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException { @@ -1858,13 +1887,16 @@ public class ZKUtil { } } - private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, - StringBuilder sb) throws KeeperException, InvalidProtocolBufferException { + private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb) + throws KeeperException, InvalidProtocolBufferException { String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state", "peer-state"); int pblen = ProtobufUtil.lengthOfPBMagic(); for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) { - if (!child.equals(peerState)) continue; + if (!child.equals(peerState)) { + continue; + } + String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child); sb.append("\n").append(peerStateZnode).append(": "); byte[] peerStateData; @@ -1929,7 +1961,10 @@ public class ZKUtil { private static void logRetrievedMsg(final ZKWatcher zkw, final String znode, final byte [] data, final boolean watcherSet) { - if (!LOG.isTraceEnabled()) return; + if (!LOG.isTraceEnabled()) { + return; + } + LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) + " byte(s) of data from znode " + znode + (watcherSet? " and set watcher; ": "; data=") + @@ -2008,7 +2043,10 @@ public class ZKUtil { * @param root name of the root directory in zk to print */ public static void logZKTree(ZKWatcher zkw, String root) { - if (!LOG.isDebugEnabled()) return; + if (!LOG.isDebugEnabled()) { + return; + } + LOG.debug("Current zk system:"); String prefix = "|-"; LOG.debug(prefix + root); @@ -2027,7 +2065,11 @@ public class ZKUtil { protected static void logZKTree(ZKWatcher zkw, String root, String prefix) throws KeeperException { List children = ZKUtil.listChildrenNoWatch(zkw, root); - if (children == null) return; + + if (children == null) { + return; + } + for (String child : children) { LOG.debug(prefix + child); String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child); @@ -2036,7 +2078,7 @@ public class ZKUtil { } /** - * @param position + * @param position the position to serialize * @return Serialized protobuf of position with pb magic prefix prepended suitable * for use as content of an wal position in a replication queue. */ @@ -2049,7 +2091,7 @@ public class ZKUtil { /** * @param bytes - Content of a WAL position znode. * @return long - The current WAL position. - * @throws DeserializationException + * @throws DeserializationException if the WAL position cannot be parsed */ public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException { if (bytes == null) { diff --git a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java index d0b0081d712..5d48117bf1b 100644 --- a/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java +++ b/hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKWatcher.java @@ -33,9 +33,9 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.AuthUtil; import org.apache.hadoop.hbase.ZooKeeperConnectionException; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.security.Superusers; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; @@ -85,8 +85,6 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { // negotiation to complete public CountDownLatch saslLatch = new CountDownLatch(1); - - private final Configuration conf; /* A pattern that matches a Kerberos name, borrowed from Hadoop's KerberosName */ @@ -95,8 +93,8 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Instantiate a ZooKeeper connection and watcher. * @param identifier string that is passed to RecoverableZookeeper to be used as - * identifier for this instance. Use null for default. - * @throws IOException + * identifier for this instance. Use null for default. + * @throws IOException if the connection to ZooKeeper fails * @throws ZooKeeperConnectionException */ public ZKWatcher(Configuration conf, String identifier, @@ -106,13 +104,13 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Instantiate a ZooKeeper connection and watcher. - * @param conf + * @param conf the configuration to use * @param identifier string that is passed to RecoverableZookeeper to be used as identifier for * this instance. Use null for default. * @param abortable Can be null if there is on error there is no host to abort: e.g. client * context. - * @param canCreateBaseZNode - * @throws IOException + * @param canCreateBaseZNode true if a base ZNode can be created + * @throws IOException if the connection to ZooKeeper fails * @throws ZooKeeperConnectionException */ public ZKWatcher(Configuration conf, String identifier, @@ -211,7 +209,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Set the znode perms recursively. This will do post-order recursion, so that baseZnode ACLs * will be set last in case the master fails in between. - * @param znode + * @param znode the ZNode to set the permissions for */ private void setZnodeAclsRecursive(String znode) throws KeeperException, InterruptedException { List children = recoverableZooKeeper.getChildren(znode, false); @@ -228,7 +226,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { * Checks whether the ACLs returned from the base znode (/hbase) is set for secure setup. * @param acls acls from zookeeper * @return whether ACLs are set for the base znode - * @throws IOException + * @throws IOException if getting the current user fails */ private boolean isBaseZnodeAclSetup(List acls) throws IOException { if (LOG.isDebugEnabled()) { @@ -355,7 +353,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { * Adds this instance's identifier as a prefix to the passed str * @param str String to amend. * @return A new string with this instance's identifier as prefix: e.g. - * if passed 'hello world', the returned string could be + * if passed 'hello world', the returned string could be */ public String prefix(final String str) { return this.toString() + " " + str; @@ -364,7 +362,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Get the znodes corresponding to the meta replicas from ZK * @return list of znodes - * @throws KeeperException + * @throws KeeperException if a ZooKeeper operation fails */ public List getMetaReplicaNodes() throws KeeperException { List childrenOfBaseNode = ZKUtil.listChildrenNoWatch(this, znodePaths.baseZNode); @@ -372,7 +370,9 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { if (childrenOfBaseNode != null) { String pattern = conf.get("zookeeper.znode.metaserver","meta-region-server"); for (String child : childrenOfBaseNode) { - if (child.startsWith(pattern)) metaReplicaNodes.add(child); + if (child.startsWith(pattern)) { + metaReplicaNodes.add(child); + } } } return metaReplicaNodes; @@ -380,7 +380,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Register the specified listener to receive ZooKeeper events. - * @param listener + * @param listener the listener to register */ public void registerListener(ZKListener listener) { listeners.add(listener); @@ -389,7 +389,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { /** * Register the specified listener to receive ZooKeeper events and add it as * the first in the list of current listeners. - * @param listener + * @param listener the listener to register */ public void registerListenerFirst(ZKListener listener) { listeners.add(0, listener); @@ -512,7 +512,7 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { * call, it's possible for the Abortable to catch it and try to create a new * session with ZooKeeper. This is what the client does in HCM. *

- * @param event + * @param event the connection-related event */ private void connectionEvent(WatchedEvent event) { switch(event.getState()) { @@ -571,11 +571,10 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { *

* TODO: Currently this method rethrows the exception to let the caller handle *

- * @param ke - * @throws KeeperException + * @param ke the exception to rethrow + * @throws KeeperException if a ZooKeeper operation fails */ - public void keeperException(KeeperException ke) - throws KeeperException { + public void keeperException(KeeperException ke) throws KeeperException { LOG.error(prefix("Received unexpected KeeperException, re-throwing exception"), ke); throw ke; } @@ -623,8 +622,11 @@ public class ZKWatcher implements Watcher, Abortable, Closeable { @Override public void abort(String why, Throwable e) { - if (this.abortable != null) this.abortable.abort(why, e); - else this.aborted = true; + if (this.abortable != null) { + this.abortable.abort(why, e); + } else { + this.aborted = true; + } } @Override