From 30f55f23166f3b0652bb2a96f8bbb1b2bcde4ace Mon Sep 17 00:00:00 2001 From: zhangduo Date: Fri, 10 Nov 2017 22:16:45 +0800 Subject: [PATCH] HBASE-19200 Make hbase-client only depend on ZKAsyncRegistry and ZNodePaths - Removes zookeeper connection from ClusterConnection - Deletes class ZooKeeperKeepAliveConnection - Removes Registry, ZooKeeperRegistry, and RegistryFactory --- .../hbase/client/ClusterConnection.java | 4 + .../client/ConnectionImplementation.java | 232 +++++-------- .../hadoop/hbase/client/HBaseAdmin.java | 328 ++++++------------ .../apache/hadoop/hbase/client/MetaCache.java | 27 +- .../apache/hadoop/hbase/client/Registry.java | 53 --- .../hadoop/hbase/client/RegistryFactory.java | 50 --- .../hadoop/hbase/client/ZKAsyncRegistry.java | 13 +- .../client/ZooKeeperKeepAliveConnection.java | 56 --- .../hbase/client/ZooKeeperRegistry.java | 129 ------- .../hbase/zookeeper/MasterAddressTracker.java | 2 +- .../hbase/zookeeper/RecoverableZooKeeper.java | 70 +--- .../hadoop/hbase/zookeeper/ZKMetadata.java | 80 +++++ .../apache/hadoop/hbase/zookeeper/ZKUtil.java | 35 +- .../hadoop/hbase/zookeeper/ZNodePaths.java | 80 +++-- .../hadoop/hbase/zookeeper/ZkAclReset.java | 2 +- .../hbase/zookeeper/ZooKeeperWatcher.java | 2 +- .../hbase/client/DoNothingAsyncRegistry.java | 64 ++++ .../hadoop/hbase/client/TestAsyncProcess.java | 21 +- .../hbase/client/TestBufferedMutator.java | 33 +- .../hbase/client/TestClientNoCluster.java | 66 ++-- .../hbase/zookeeper/TestZooKeeperWatcher.java | 9 +- .../hbase/IntegrationTestMetaReplicas.java | 3 +- .../IntegrationTestZKAndFSPermissions.java | 3 +- .../replication/ReplicationPeersZKImpl.java | 3 +- .../ReplicationQueuesClientZKImpl.java | 9 +- .../replication/ReplicationQueuesZKImpl.java | 54 +-- .../replication/ReplicationStateZKBase.java | 17 +- .../hbase/rsgroup/RSGroupInfoManagerImpl.java | 11 +- .../rsgroup/VerifyingRSGroupAdminClient.java | 5 +- .../hadoop/hbase/ZKNamespaceManager.java | 5 +- .../org/apache/hadoop/hbase/ZNodeClearer.java | 12 +- .../backup/example/HFileArchiveManager.java | 3 +- .../backup/example/ZKTableArchiveClient.java | 4 +- .../ZKSplitLogManagerCoordination.java | 10 +- .../ZkSplitLogWorkerCoordination.java | 9 +- .../hbase/master/ActiveMasterManager.java | 3 +- .../apache/hadoop/hbase/master/HMaster.java | 9 +- .../cleaner/ReplicationZKNodeCleaner.java | 7 +- .../procedure/ZKProcedureCoordinator.java | 5 +- .../procedure/ZKProcedureMemberRpcs.java | 10 +- .../hbase/procedure/ZKProcedureUtil.java | 19 +- .../hbase/regionserver/HRegionServer.java | 3 +- .../security/access/ZKPermissionWatcher.java | 15 +- .../AuthenticationTokenSecretManager.java | 4 +- .../hbase/security/token/ZKSecretWatcher.java | 7 +- .../visibility/ZKVisibilityLabelWatcher.java | 5 +- .../apache/hadoop/hbase/util/HBaseFsck.java | 3 +- .../hadoop/hbase/util/ZKDataMigrator.java | 3 +- .../hbase/zookeeper/RegionServerTracker.java | 2 +- .../hbase/zookeeper/SplitOrMergeTracker.java | 4 +- .../hadoop/hbase/zookeeper/ZKSplitLog.java | 4 +- .../apache/hadoop/hbase/GenericTestUtils.java | 1 + .../hbase/client/TestMetaWithReplicas.java | 9 +- .../hbase/master/TestAssignmentListener.java | 5 +- .../hbase/master/TestMetaShutdownHandler.java | 3 +- .../hbase/master/TestTableStateManager.java | 3 +- .../TestCompactionInDeadRegionServer.java | 4 +- .../regionserver/TestSplitLogWorker.java | 7 +- .../replication/TestMasterReplication.java | 7 +- .../TestReplicationStateHBaseImpl.java | 3 +- .../TestReplicationStateZKImpl.java | 9 +- .../TestReplicationTrackerZKImpl.java | 18 +- .../TestReplicationSourceManager.java | 8 +- .../token/TestZKSecretWatcherRefreshKeys.java | 3 +- .../hadoop/hbase/zookeeper/TestZKMulti.java | 40 +-- .../zookeeper/TestZooKeeperNodeTracker.java | 2 +- 66 files changed, 686 insertions(+), 1043 deletions(-) delete mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/Registry.java delete mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegistryFactory.java delete mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperKeepAliveConnection.java delete mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperRegistry.java create mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMetadata.java create mode 100644 hbase-client/src/test/java/org/apache/hadoop/hbase/client/DoNothingAsyncRegistry.java diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java index a931b1dcb92..7294559d757 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnection.java @@ -226,6 +226,10 @@ public interface ClusterConnection extends Connection { */ MasterService.BlockingInterface getMaster() throws IOException; + /** + * Get the admin service for master. + */ + AdminService.BlockingInterface getAdminForMaster() throws IOException; /** * Establishes a connection to the region server at the specified address. diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java index 56a2e84f0e1..47e8dc89c98 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java @@ -25,16 +25,23 @@ import static org.apache.hadoop.hbase.client.MetricsConnection.CLIENT_SIDE_METRI import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent; import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsentEx; +import com.google.common.base.Throwables; + +import edu.umd.cs.findbugs.annotations.Nullable; + import java.io.Closeable; import java.io.IOException; import java.io.InterruptedIOException; import java.lang.reflect.UndeclaredThrowableException; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -47,7 +54,6 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CallQueueTooBigException; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.MetaTableAccessor; @@ -72,9 +78,6 @@ import org.apache.hadoop.hbase.util.ExceptionUtil; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.ReflectionUtils; import org.apache.hadoop.hbase.util.Threads; -import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.ipc.RemoteException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; @@ -124,8 +127,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.Remov import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse; -import edu.umd.cs.findbugs.annotations.Nullable; - /** * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces. * Encapsulates connection to zookeeper and regionservers. @@ -168,12 +169,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { private final Object metaRegionLock = new Object(); - // We have a single lock for master & zk to prevent deadlocks. Having - // one lock for ZK and one lock for master is not possible: - // When creating a connection to master, we need a connection to ZK to get - // its address. But another thread could have taken the ZK lock, and could - // be waiting for the master lock => deadlock. - private final Object masterAndZKLock = new Object(); + private final Object masterLock = new Object(); // thread executor shared by all Table instances created // by this connection @@ -206,7 +202,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { /** * Cluster registry of basic info such as clusterid and meta region location. */ - Registry registry; + private final AsyncRegistry registry; private final ClientBackoffPolicy backoffPolicy; @@ -284,7 +280,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { this.conf.get(BufferedMutator.CLASSNAME_KEY); try { - this.registry = setupRegistry(); + this.registry = AsyncRegistryFactory.getRegistry(conf); retrieveClusterId(); this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics); @@ -494,13 +490,6 @@ class ConnectionImplementation implements ClusterConnection, Closeable { } } - /** - * @return The cluster registry implementation to use. - */ - private Registry setupRegistry() throws IOException { - return RegistryFactory.getRegistry(this); - } - /** * For tests only. */ @@ -523,7 +512,11 @@ class ConnectionImplementation implements ClusterConnection, Closeable { if (clusterId != null) { return; } - this.clusterId = this.registry.getClusterId(); + try { + this.clusterId = this.registry.getClusterId().get(); + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Retrieve cluster id failed", e); + } if (clusterId == null) { clusterId = HConstants.CLUSTER_ID_DEFAULT; LOG.debug("clusterid came back null, using default " + clusterId); @@ -535,25 +528,6 @@ class ConnectionImplementation implements ClusterConnection, Closeable { return this.conf; } - private void checkIfBaseNodeAvailable(ZooKeeperWatcher zkw) - throws MasterNotRunningException { - String errorMsg; - try { - if (ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode) == -1) { - errorMsg = "The node " + zkw.znodePaths.baseZNode+" is not in ZooKeeper. " - + "It should have been written by the master. " - + "Check the value configured in 'zookeeper.znode.parent'. " - + "There could be a mismatch with the one configured in the master."; - LOG.error(errorMsg); - throw new MasterNotRunningException(errorMsg); - } - } catch (KeeperException e) { - errorMsg = "Can't get connection to ZooKeeper: " + e.getMessage(); - LOG.error(errorMsg); - throw new MasterNotRunningException(errorMsg, e); - } - } - /** * @return true if the master is running, throws an exception otherwise * @throws org.apache.hadoop.hbase.MasterNotRunningException - if the master is not running @@ -652,8 +626,8 @@ class ConnectionImplementation implements ClusterConnection, Closeable { @Override public HRegionLocation locateRegion(final byte[] regionName) throws IOException { - RegionLocations locations = locateRegion(HRegionInfo.getTable(regionName), - HRegionInfo.getStartKey(regionName), false, true); + RegionLocations locations = locateRegion(RegionInfo.getTable(regionName), + RegionInfo.getStartKey(regionName), false, true); return locations == null ? null : locations.getRegionLocation(); } @@ -667,17 +641,20 @@ class ConnectionImplementation implements ClusterConnection, Closeable { } @Override - public List locateRegions(final TableName tableName) - throws IOException { + public List locateRegions(TableName tableName) throws IOException { return locateRegions(tableName, false, true); } @Override - public List locateRegions(final TableName tableName, - final boolean useCache, final boolean offlined) throws IOException { - List regions = MetaTableAccessor - .getTableRegions(this, tableName, !offlined); - final List locations = new ArrayList<>(); + public List locateRegions(TableName tableName, boolean useCache, + boolean offlined) throws IOException { + List regions; + if (TableName.isMetaTableName(tableName)) { + regions = Collections.singletonList(RegionInfoBuilder.FIRST_META_REGIONINFO); + } else { + regions = MetaTableAccessor.getTableRegions(this, tableName, !offlined); + } + List locations = new ArrayList<>(); for (RegionInfo regionInfo : regions) { RegionLocations list = locateRegion(tableName, regionInfo.getStartKey(), useCache, true); if (list != null) { @@ -772,7 +749,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { } // Look up from zookeeper - locations = this.registry.getMetaRegionLocation(); + locations = get(this.registry.getMetaRegionLocation()); if (locations != null) { cacheLocation(tableName, locations); } @@ -799,7 +776,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { // build the key of the meta region we should be looking for. // the extra 9's on the end are necessary to allow "exact" matches // without knowing the precise region names. - byte[] metaKey = HRegionInfo.createRegionName(tableName, row, HConstants.NINES, false); + byte[] metaKey = RegionInfo.createRegionName(tableName, row, HConstants.NINES, false); Scan s = new Scan(); s.setReversed(true); @@ -851,7 +828,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { throw new IOException("HRegionInfo was null in " + tableName + ", row=" + regionInfoRow); } - HRegionInfo regionInfo = locations.getRegionLocation(replicaId).getRegionInfo(); + RegionInfo regionInfo = locations.getRegionLocation(replicaId).getRegion(); if (regionInfo == null) { throw new IOException("HRegionInfo was null or empty in " + TableName.META_TABLE_NAME + ", row=" + regionInfoRow); @@ -1124,37 +1101,25 @@ class ConnectionImplementation implements ClusterConnection, Closeable { */ private MasterProtos.MasterService.BlockingInterface makeStubNoRetries() throws IOException, KeeperException { - ZooKeeperKeepAliveConnection zkw; - try { - zkw = getKeepAliveZooKeeperWatcher(); - } catch (IOException e) { - ExceptionUtil.rethrowIfInterrupt(e); - throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e); + ServerName sn = get(registry.getMasterAddress()); + if (sn == null) { + String msg = "ZooKeeper available but no active master location found"; + LOG.info(msg); + throw new MasterNotRunningException(msg); } - try { - checkIfBaseNodeAvailable(zkw); - ServerName sn = MasterAddressTracker.getMasterAddress(zkw); - if (sn == null) { - String msg = "ZooKeeper available but no active master location found"; - LOG.info(msg); - throw new MasterNotRunningException(msg); - } - if (isDeadServer(sn)) { - throw new MasterNotRunningException(sn + " is dead."); - } - // Use the security info interface name as our stub key - String key = getStubKey(MasterProtos.MasterService.getDescriptor().getName(), sn, - hostnamesCanChange); - MasterProtos.MasterService.BlockingInterface stub = - (MasterProtos.MasterService.BlockingInterface) computeIfAbsentEx(stubs, key, () -> { - BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(sn, user, rpcTimeout); - return MasterProtos.MasterService.newBlockingStub(channel); - }); - isMasterRunning(stub); - return stub; - } finally { - zkw.close(); + if (isDeadServer(sn)) { + throw new MasterNotRunningException(sn + " is dead."); } + // Use the security info interface name as our stub key + String key = + getStubKey(MasterProtos.MasterService.getDescriptor().getName(), sn, hostnamesCanChange); + MasterProtos.MasterService.BlockingInterface stub = + (MasterProtos.MasterService.BlockingInterface) computeIfAbsentEx(stubs, key, () -> { + BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(sn, user, rpcTimeout); + return MasterProtos.MasterService.newBlockingStub(channel); + }); + isMasterRunning(stub); + return stub; } /** @@ -1165,7 +1130,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { MasterProtos.MasterService.BlockingInterface makeStub() throws IOException { // The lock must be at the beginning to prevent multiple master creations // (and leaks) in a multithread context - synchronized (masterAndZKLock) { + synchronized (masterLock) { Exception exceptionCaught = null; if (!closed) { try { @@ -1183,6 +1148,11 @@ class ConnectionImplementation implements ClusterConnection, Closeable { } } + @Override + public AdminProtos.AdminService.BlockingInterface getAdminForMaster() throws IOException { + return getAdmin(get(registry.getMasterAddress())); + } + @Override public AdminProtos.AdminService.BlockingInterface getAdmin(ServerName serverName) throws IOException { @@ -1212,48 +1182,6 @@ class ConnectionImplementation implements ClusterConnection, Closeable { }); } - private ZooKeeperKeepAliveConnection keepAliveZookeeper; - private AtomicInteger keepAliveZookeeperUserCount = new AtomicInteger(0); - - /** - * Retrieve a shared ZooKeeperWatcher. You must close it it once you've have finished with it. - * @return The shared instance. Never returns null. - */ - ZooKeeperKeepAliveConnection getKeepAliveZooKeeperWatcher() - throws IOException { - synchronized (masterAndZKLock) { - if (keepAliveZookeeper == null) { - if (this.closed) { - throw new IOException(toString() + " closed"); - } - // We don't check that our link to ZooKeeper is still valid - // But there is a retry mechanism in the ZooKeeperWatcher itself - keepAliveZookeeper = new ZooKeeperKeepAliveConnection(conf, this.toString(), this); - } - keepAliveZookeeperUserCount.addAndGet(1); - return keepAliveZookeeper; - } - } - - void releaseZooKeeperWatcher(final ZooKeeperWatcher zkw) { - if (zkw == null){ - return; - } - } - - private void closeZooKeeperWatcher() { - synchronized (masterAndZKLock) { - if (keepAliveZookeeper != null) { - LOG.info("Closing zookeeper sessionid=0x" + - Long.toHexString( - keepAliveZookeeper.getRecoverableZooKeeper().getSessionId())); - keepAliveZookeeper.internalClose(); - keepAliveZookeeper = null; - } - keepAliveZookeeperUserCount.set(0); - } - } - final MasterServiceState masterServiceState = new MasterServiceState(this); @Override @@ -1268,7 +1196,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { @Override public MasterKeepAliveConnection getKeepAliveMasterService() throws MasterNotRunningException { - synchronized (masterAndZKLock) { + synchronized (masterLock) { if (!isKeepAliveMasterConnectedAndRunning(this.masterServiceState)) { MasterServiceStubMaker stubMaker = new MasterServiceStubMaker(); try { @@ -1812,7 +1740,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { if (mss.getStub() == null) { return; } - synchronized (masterAndZKLock) { + synchronized (masterLock) { --mss.userCount; } } @@ -1830,13 +1758,12 @@ class ConnectionImplementation implements ClusterConnection, Closeable { * connection itself. */ private void closeMaster() { - synchronized (masterAndZKLock) { + synchronized (masterLock) { closeMasterService(masterServiceState); } } - void updateCachedLocation(HRegionInfo hri, ServerName source, - ServerName serverName, long seqNum) { + void updateCachedLocation(RegionInfo hri, ServerName source, ServerName serverName, long seqNum) { HRegionLocation newHrl = new HRegionLocation(hri, serverName, seqNum); cacheLocation(hri.getTable(), source, newHrl); } @@ -1889,7 +1816,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { return; } - HRegionInfo regionInfo = oldLocation.getRegionInfo(); + RegionInfo regionInfo = oldLocation.getRegion(); Throwable cause = ClientExceptionsUtil.findException(exception); if (cause != null) { if (!ClientExceptionsUtil.isMetaClearingException(cause)) { @@ -1902,7 +1829,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { if (LOG.isTraceEnabled()) { LOG.trace("Region " + regionInfo.getRegionNameAsString() + " moved to " + rme.getHostname() + ":" + rme.getPort() + - " according to " + source.getHostAndPort()); + " according to " + source.getAddress()); } // We know that the region is not anymore on this region server, but we know // the new location. @@ -1947,26 +1874,14 @@ class ConnectionImplementation implements ClusterConnection, Closeable { @Override public void abort(final String msg, Throwable t) { - if (t instanceof KeeperException.SessionExpiredException - && keepAliveZookeeper != null) { - synchronized (masterAndZKLock) { - if (keepAliveZookeeper != null) { - LOG.warn("This client just lost it's session with ZooKeeper," + - " closing it." + - " It will be recreated next time someone needs it", t); - closeZooKeeperWatcher(); - } - } + if (t != null) { + LOG.fatal(msg, t); } else { - if (t != null) { - LOG.fatal(msg, t); - } else { - LOG.fatal(msg); - } - this.aborted = true; - close(); - this.closed = true; + LOG.fatal(msg); } + this.aborted = true; + close(); + this.closed = true; } @Override @@ -1981,7 +1896,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { @Override public int getCurrentNrHRS() throws IOException { - return this.registry.getCurrentNrHRS(); + return get(this.registry.getCurrentNrHRS()); } @Override @@ -1995,7 +1910,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable { this.metrics.shutdown(); } this.closed = true; - closeZooKeeperWatcher(); + registry.close(); this.stubs.clear(); if (clusterStatusListener != null) { clusterStatusListener.close(); @@ -2061,4 +1976,17 @@ class ConnectionImplementation implements ClusterConnection, Closeable { public RpcControllerFactory getRpcControllerFactory() { return this.rpcControllerFactory; } + + private static T get(CompletableFuture future) throws IOException { + try { + return future.get(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw (IOException) new InterruptedIOException().initCause(e); + } catch (ExecutionException e) { + Throwable cause = e.getCause(); + Throwables.propagateIfPossible(cause, IOException.class); + throw new IOException(cause); + } + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index 0c66faf3836..80f9d163b39 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -18,6 +18,10 @@ */ package org.apache.hadoop.hbase.client; +import com.google.protobuf.Descriptors; +import com.google.protobuf.Message; +import com.google.protobuf.RpcController; + import java.io.Closeable; import java.io.IOException; import java.io.InterruptedIOException; @@ -97,14 +101,10 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.ForeignExceptionUtil; import org.apache.hadoop.hbase.util.Pair; -import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker; -import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.ipc.RemoteException; import org.apache.hadoop.util.StringUtils; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; -import org.apache.zookeeper.KeeperException; import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; @@ -206,10 +206,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos; -import com.google.protobuf.Descriptors; -import com.google.protobuf.Message; -import com.google.protobuf.RpcController; - /** * HBaseAdmin is no longer a client API. It is marked InterfaceAudience.Private indicating that * this is an HBase-internal class as defined in @@ -399,18 +395,11 @@ public class HBaseAdmin implements Admin { } @Override - public List getRegions(final TableName tableName) throws IOException { - ZooKeeperWatcher zookeeper = - new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), - new ThrowableAbortable()); - try { - if (TableName.META_TABLE_NAME.equals(tableName)) { - return new MetaTableLocator().getMetaRegions(zookeeper); - } else { - return MetaTableAccessor.getTableRegions(connection, tableName, true); - } - } finally { - zookeeper.close(); + public List getRegions(TableName tableName) throws IOException { + if (TableName.isMetaTableName(tableName)) { + return Arrays.asList(RegionInfoBuilder.FIRST_META_REGIONINFO); + } else { + return MetaTableAccessor.getTableRegions(connection, tableName, true); } } @@ -1248,9 +1237,9 @@ public class HBaseAdmin implements Admin { */ @Override public void compactRegionServer(final ServerName sn, boolean major) - throws IOException, InterruptedException { - for (HRegionInfo region : getOnlineRegions(sn)) { - compact(sn, region, major, null); + throws IOException, InterruptedException { + for (RegionInfo region : getRegions(sn)) { + compact(this.connection.getAdmin(sn), region, major, null); } } @@ -1295,41 +1284,28 @@ public class HBaseAdmin implements Admin { CompactType compactType) throws IOException { switch (compactType) { case MOB: - ServerName master = getMasterAddress(); - compact(master, getMobRegionInfo(tableName), major, columnFamily); + compact(this.connection.getAdminForMaster(), getMobRegionInfo(tableName), major, + columnFamily); break; case NORMAL: - default: - ZooKeeperWatcher zookeeper = null; - try { - checkTableExists(tableName); - zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), - new ThrowableAbortable()); - List> pairs; - if (TableName.META_TABLE_NAME.equals(tableName)) { - pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); - } else { - pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + checkTableExists(tableName); + for (HRegionLocation loc :connection.locateRegions(tableName, false, false)) { + ServerName sn = loc.getServerName(); + if (sn == null) { + continue; } - for (Pair pair: pairs) { - if (pair.getFirst().isOffline()) continue; - if (pair.getSecond() == null) continue; - try { - compact(pair.getSecond(), pair.getFirst(), major, columnFamily); - } catch (NotServingRegionException e) { - if (LOG.isDebugEnabled()) { - LOG.debug("Trying to" + (major ? " major" : "") + " compact " + - pair.getFirst() + ": " + - StringUtils.stringifyException(e)); - } + try { + compact(this.connection.getAdmin(sn), loc.getRegion(), major, columnFamily); + } catch (NotServingRegionException e) { + if (LOG.isDebugEnabled()) { + LOG.debug("Trying to" + (major ? " major" : "") + " compact " + loc.getRegion() + + ": " + StringUtils.stringifyException(e)); } } - } finally { - if (zookeeper != null) { - zookeeper.close(); - } } break; + default: + throw new IllegalArgumentException("Unknown compactType: " + compactType); } } @@ -1343,8 +1319,8 @@ public class HBaseAdmin implements Admin { * @throws IOException if a remote or network exception occurs * @throws InterruptedException */ - private void compactRegion(final byte[] regionName, final byte[] columnFamily,final boolean major) - throws IOException { + private void compactRegion(final byte[] regionName, final byte[] columnFamily, + final boolean major) throws IOException { Pair regionServerPair = getRegion(regionName); if (regionServerPair == null) { throw new IllegalArgumentException("Invalid region: " + Bytes.toStringBinary(regionName)); @@ -1352,13 +1328,12 @@ public class HBaseAdmin implements Admin { if (regionServerPair.getSecond() == null) { throw new NoServerForRegionException(Bytes.toStringBinary(regionName)); } - compact(regionServerPair.getSecond(), regionServerPair.getFirst(), major, columnFamily); + compact(this.connection.getAdmin(regionServerPair.getSecond()), regionServerPair.getFirst(), + major, columnFamily); } - private void compact(final ServerName sn, final RegionInfo hri, - final boolean major, final byte [] family) - throws IOException { - final AdminService.BlockingInterface admin = this.connection.getAdmin(sn); + private void compact(AdminService.BlockingInterface admin, RegionInfo hri, boolean major, + byte[] family) throws IOException { Callable callable = new Callable() { @Override public Void call() throws Exception { @@ -1863,37 +1838,25 @@ public class HBaseAdmin implements Admin { } @Override - public void split(final TableName tableName, final byte [] splitPoint) throws IOException { - ZooKeeperWatcher zookeeper = null; - try { - checkTableExists(tableName); - zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), - new ThrowableAbortable()); - List> pairs; - if (TableName.META_TABLE_NAME.equals(tableName)) { - pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); - } else { - pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + public void split(final TableName tableName, final byte[] splitPoint) throws IOException { + checkTableExists(tableName); + for (HRegionLocation loc : connection.locateRegions(tableName, false, false)) { + ServerName sn = loc.getServerName(); + if (sn == null) { + continue; } - if (splitPoint == null) { - LOG.info("SplitPoint is null, will find bestSplitPoint from Region"); + RegionInfo r = loc.getRegion(); + // check for parents + if (r.isSplitParent()) { + continue; } - for (Pair pair: pairs) { - // May not be a server for a particular row - if (pair.getSecond() == null) continue; - RegionInfo r = pair.getFirst(); - // check for parents - if (r.isSplitParent()) continue; - // if a split point given, only split that particular region - if (r.getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID || - (splitPoint != null && !r.containsRow(splitPoint))) continue; - // call out to master to do split now - splitRegionAsync(pair.getFirst(), splitPoint); - } - } finally { - if (zookeeper != null) { - zookeeper.close(); + // if a split point given, only split that particular region + if (r.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID || + (splitPoint != null && !r.containsRow(splitPoint))) { + continue; } + // call out to master to do split now + splitRegionAsync(r, splitPoint); } } @@ -2345,33 +2308,15 @@ public class HBaseAdmin implements Admin { }); } - /** - * Check to see if HBase is running. Throw an exception if not. - * @param conf system configuration - * @throws MasterNotRunningException if the master is not running - * @throws ZooKeeperConnectionException if unable to connect to zookeeper - * @deprecated since hbase-2.0.0 because throws a ServiceException. We don't want to have - * protobuf as part of our public API. Use {@link #available(Configuration)} - */ - // Used by tests and by the Merge tool. Merge tool uses it to figure if HBase is up or not. - // MOB uses it too. - // NOTE: hbase-2.0.0 removes ServiceException from the throw. - @Deprecated - public static void checkHBaseAvailable(Configuration conf) - throws MasterNotRunningException, ZooKeeperConnectionException, IOException, - com.google.protobuf.ServiceException { - available(conf); - } - /** * Is HBase available? Throw an exception if not. * @param conf system configuration * @throws MasterNotRunningException if the master is not running. - * @throws ZooKeeperConnectionException if unable to connect to zookeeper. - * // TODO do not expose ZKConnectionException. + * @throws ZooKeeperConnectionException if unable to connect to zookeeper. // TODO do not expose + * ZKConnectionException. */ public static void available(final Configuration conf) - throws MasterNotRunningException, ZooKeeperConnectionException, IOException { + throws MasterNotRunningException, ZooKeeperConnectionException, IOException { Configuration copyOfConf = HBaseConfiguration.create(conf); // We set it to make it fail as soon as possible if HBase is not available copyOfConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 1); @@ -2381,26 +2326,6 @@ public class HBaseAdmin implements Admin { // If the connection exists, we may have a connection to ZK that does not work anymore try (ClusterConnection connection = (ClusterConnection) ConnectionFactory.createConnection(copyOfConf)) { - // Check ZK first. - // If the connection exists, we may have a connection to ZK that does not work anymore - ZooKeeperKeepAliveConnection zkw = null; - try { - // This is NASTY. FIX!!!! Dependent on internal implementation! TODO - zkw = ((ConnectionImplementation) connection) - .getKeepAliveZooKeeperWatcher(); - zkw.getRecoverableZooKeeper().getZooKeeper().exists(zkw.znodePaths.baseZNode, false); - } catch (IOException e) { - throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e); - } catch (InterruptedException e) { - throw (InterruptedIOException) - new InterruptedIOException("Can't connect to ZooKeeper").initCause(e); - } catch (KeeperException e){ - throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e); - } finally { - if (zkw != null) { - zkw.close(); - } - } // can throw MasterNotRunningException connection.isMasterRunning(); } @@ -3232,17 +3157,6 @@ public class HBaseAdmin implements Admin { } } - private ServerName getMasterAddress() throws IOException { - // TODO: Fix! Reaching into internal implementation!!!! - ConnectionImplementation connection = (ConnectionImplementation)this.connection; - ZooKeeperKeepAliveConnection zkw = connection.getKeepAliveZooKeeperWatcher(); - try { - return MasterAddressTracker.getMasterAddress(zkw); - } catch (KeeperException e) { - throw new IOException("Failed to get master server name from MasterAddressTracker", e); - } - } - @Override public long getLastMajorCompactionTimestamp(final TableName tableName) throws IOException { return executeCallable(new MasterCallable(getConnection(), getRpcControllerFactory()) { @@ -3311,102 +3225,88 @@ public class HBaseAdmin implements Admin { * {@inheritDoc} */ @Override - public CompactionState getCompactionState(final TableName tableName, - CompactType compactType) throws IOException { + public CompactionState getCompactionState(final TableName tableName, CompactType compactType) + throws IOException { AdminProtos.GetRegionInfoResponse.CompactionState state = - AdminProtos.GetRegionInfoResponse.CompactionState.NONE; + AdminProtos.GetRegionInfoResponse.CompactionState.NONE; checkTableExists(tableName); // TODO: There is no timeout on this controller. Set one! - final HBaseRpcController rpcController = rpcControllerFactory.newController(); + HBaseRpcController rpcController = rpcControllerFactory.newController(); switch (compactType) { case MOB: final AdminProtos.AdminService.BlockingInterface masterAdmin = - this.connection.getAdmin(getMasterAddress()); + this.connection.getAdminForMaster(); Callable callable = - new Callable() { - @Override - public AdminProtos.GetRegionInfoResponse.CompactionState call() throws Exception { - HRegionInfo info = getMobRegionInfo(tableName); - GetRegionInfoRequest request = RequestConverter.buildGetRegionInfoRequest( - info.getRegionName(), true); - GetRegionInfoResponse response = masterAdmin.getRegionInfo(rpcController, request); - return response.getCompactionState(); - } - }; + new Callable() { + @Override + public AdminProtos.GetRegionInfoResponse.CompactionState call() throws Exception { + RegionInfo info = getMobRegionInfo(tableName); + GetRegionInfoRequest request = + RequestConverter.buildGetRegionInfoRequest(info.getRegionName(), true); + GetRegionInfoResponse response = masterAdmin.getRegionInfo(rpcController, request); + return response.getCompactionState(); + } + }; state = ProtobufUtil.call(callable); break; case NORMAL: - default: - ZooKeeperWatcher zookeeper = null; - try { - List> pairs; - if (TableName.META_TABLE_NAME.equals(tableName)) { - zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), - new ThrowableAbortable()); - pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); - } else { - pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + for (HRegionLocation loc : connection.locateRegions(tableName, false, false)) { + ServerName sn = loc.getServerName(); + if (sn == null) { + continue; } - for (Pair pair: pairs) { - if (pair.getFirst().isOffline()) continue; - if (pair.getSecond() == null) continue; - final ServerName sn = pair.getSecond(); - final byte [] regionName = pair.getFirst().getRegionName(); - final AdminService.BlockingInterface snAdmin = this.connection.getAdmin(sn); - try { - Callable regionInfoCallable = - new Callable() { + byte[] regionName = loc.getRegion().getRegionName(); + AdminService.BlockingInterface snAdmin = this.connection.getAdmin(sn); + try { + Callable regionInfoCallable = + new Callable() { @Override public GetRegionInfoResponse call() throws Exception { - GetRegionInfoRequest request = RequestConverter.buildGetRegionInfoRequest( - regionName, true); + GetRegionInfoRequest request = + RequestConverter.buildGetRegionInfoRequest(regionName, true); return snAdmin.getRegionInfo(rpcController, request); } }; - GetRegionInfoResponse response = ProtobufUtil.call(regionInfoCallable); - switch (response.getCompactionState()) { - case MAJOR_AND_MINOR: + GetRegionInfoResponse response = ProtobufUtil.call(regionInfoCallable); + switch (response.getCompactionState()) { + case MAJOR_AND_MINOR: + return CompactionState.MAJOR_AND_MINOR; + case MAJOR: + if (state == AdminProtos.GetRegionInfoResponse.CompactionState.MINOR) { return CompactionState.MAJOR_AND_MINOR; - case MAJOR: - if (state == AdminProtos.GetRegionInfoResponse.CompactionState.MINOR) { - return CompactionState.MAJOR_AND_MINOR; - } - state = AdminProtos.GetRegionInfoResponse.CompactionState.MAJOR; - break; - case MINOR: - if (state == AdminProtos.GetRegionInfoResponse.CompactionState.MAJOR) { - return CompactionState.MAJOR_AND_MINOR; - } - state = AdminProtos.GetRegionInfoResponse.CompactionState.MINOR; - break; - case NONE: - default: // nothing, continue - } - } catch (NotServingRegionException e) { - if (LOG.isDebugEnabled()) { - LOG.debug("Trying to get compaction state of " + - pair.getFirst() + ": " + - StringUtils.stringifyException(e)); - } - } catch (RemoteException e) { - if (e.getMessage().indexOf(NotServingRegionException.class.getName()) >= 0) { - if (LOG.isDebugEnabled()) { - LOG.debug("Trying to get compaction state of " + pair.getFirst() + ": " - + StringUtils.stringifyException(e)); } - } else { - throw e; - } + state = AdminProtos.GetRegionInfoResponse.CompactionState.MAJOR; + break; + case MINOR: + if (state == AdminProtos.GetRegionInfoResponse.CompactionState.MAJOR) { + return CompactionState.MAJOR_AND_MINOR; + } + state = AdminProtos.GetRegionInfoResponse.CompactionState.MINOR; + break; + case NONE: + default: // nothing, continue + } + } catch (NotServingRegionException e) { + if (LOG.isDebugEnabled()) { + LOG.debug("Trying to get compaction state of " + loc.getRegion() + ": " + + StringUtils.stringifyException(e)); + } + } catch (RemoteException e) { + if (e.getMessage().indexOf(NotServingRegionException.class.getName()) >= 0) { + if (LOG.isDebugEnabled()) { + LOG.debug("Trying to get compaction state of " + loc.getRegion() + ": " + + StringUtils.stringifyException(e)); + } + } else { + throw e; } - } - } finally { - if (zookeeper != null) { - zookeeper.close(); } } break; + default: + throw new IllegalArgumentException("Unknowne compactType: " + compactType); } - if(state != null) { + if (state != null) { return ProtobufUtil.createCompactionState(state); } return null; @@ -3927,9 +3827,9 @@ public class HBaseAdmin implements Admin { }); } - private HRegionInfo getMobRegionInfo(TableName tableName) { - return new HRegionInfo(tableName, Bytes.toBytes(".mob"), - HConstants.EMPTY_END_ROW, false, 0); + private RegionInfo getMobRegionInfo(TableName tableName) { + return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(".mob")).setRegionId(0) + .build(); } private RpcControllerFactory getRpcControllerFactory() { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java index defb3ec9075..6dc46d39d06 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java @@ -30,14 +30,13 @@ import java.util.concurrent.CopyOnWriteArraySet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.RegionLocations; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.types.CopyOnWriteArrayMap; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.yetus.audience.InterfaceAudience; /** * A cache implementation for region locations from meta. @@ -88,7 +87,7 @@ public class MetaCache { // this one. the exception case is when the endkey is // HConstants.EMPTY_END_ROW, signifying that the region we're // checking is actually the last region in the table. - byte[] endKey = possibleRegion.getRegionLocation().getRegionInfo().getEndKey(); + byte[] endKey = possibleRegion.getRegionLocation().getRegion().getEndKey(); // Here we do direct Bytes.compareTo and not doing CellComparator/MetaCellComparator path. // MetaCellComparator is for comparing against data in META table which need special handling. // Not doing that is ok for this case because @@ -117,7 +116,7 @@ public class MetaCache { public void cacheLocation(final TableName tableName, final ServerName source, final HRegionLocation location) { assert source != null; - byte [] startKey = location.getRegionInfo().getStartKey(); + byte [] startKey = location.getRegion().getStartKey(); ConcurrentMap tableLocations = getTableLocations(tableName); RegionLocations locations = new RegionLocations(new HRegionLocation[] {location}) ; RegionLocations oldLocations = tableLocations.putIfAbsent(startKey, locations); @@ -132,7 +131,7 @@ public class MetaCache { // If the server in cache sends us a redirect, assume it's always valid. HRegionLocation oldLocation = oldLocations.getRegionLocation( - location.getRegionInfo().getReplicaId()); + location.getRegion().getReplicaId()); boolean force = oldLocation != null && oldLocation.getServerName() != null && oldLocation.getServerName().equals(source); @@ -157,7 +156,7 @@ public class MetaCache { * @param locations the new locations */ public void cacheLocation(final TableName tableName, final RegionLocations locations) { - byte [] startKey = locations.getRegionLocation().getRegionInfo().getStartKey(); + byte [] startKey = locations.getRegionLocation().getRegion().getStartKey(); ConcurrentMap tableLocations = getTableLocations(tableName); RegionLocations oldLocation = tableLocations.putIfAbsent(startKey, locations); boolean isNewCacheEntry = (oldLocation == null); @@ -299,7 +298,7 @@ public class MetaCache { RegionLocations regionLocations = getCachedLocation(tableName, row); if (regionLocations != null) { - byte[] startKey = regionLocations.getRegionLocation().getRegionInfo().getStartKey(); + byte[] startKey = regionLocations.getRegionLocation().getRegion().getStartKey(); boolean removed = tableLocations.remove(startKey, regionLocations); if (removed) { if (metrics != null) { @@ -326,7 +325,7 @@ public class MetaCache { HRegionLocation toBeRemoved = regionLocations.getRegionLocation(replicaId); if (toBeRemoved != null) { RegionLocations updatedLocations = regionLocations.remove(replicaId); - byte[] startKey = regionLocations.getRegionLocation().getRegionInfo().getStartKey(); + byte[] startKey = regionLocations.getRegionLocation().getRegion().getStartKey(); boolean removed; if (updatedLocations.isEmpty()) { removed = tableLocations.remove(startKey, regionLocations); @@ -356,7 +355,7 @@ public class MetaCache { if (regionLocations != null) { RegionLocations updatedLocations = regionLocations.removeByServer(serverName); if (updatedLocations != regionLocations) { - byte[] startKey = regionLocations.getRegionLocation().getRegionInfo().getStartKey(); + byte[] startKey = regionLocations.getRegionLocation().getRegion().getStartKey(); boolean removed = false; if (updatedLocations.isEmpty()) { removed = tableLocations.remove(startKey, regionLocations); @@ -380,7 +379,7 @@ public class MetaCache { * Deletes the cached location of the region if necessary, based on some error from source. * @param hri The region in question. */ - public void clearCache(HRegionInfo hri) { + public void clearCache(RegionInfo hri) { ConcurrentMap tableLocations = getTableLocations(hri.getTable()); RegionLocations regionLocations = tableLocations.get(hri.getStartKey()); if (regionLocations != null) { @@ -410,17 +409,17 @@ public class MetaCache { if (location == null) { return; } - TableName tableName = location.getRegionInfo().getTable(); + TableName tableName = location.getRegion().getTable(); ConcurrentMap tableLocations = getTableLocations(tableName); - RegionLocations regionLocations = tableLocations.get(location.getRegionInfo().getStartKey()); + RegionLocations regionLocations = tableLocations.get(location.getRegion().getStartKey()); if (regionLocations != null) { RegionLocations updatedLocations = regionLocations.remove(location); boolean removed; if (updatedLocations != regionLocations) { if (updatedLocations.isEmpty()) { - removed = tableLocations.remove(location.getRegionInfo().getStartKey(), regionLocations); + removed = tableLocations.remove(location.getRegion().getStartKey(), regionLocations); } else { - removed = tableLocations.replace(location.getRegionInfo().getStartKey(), regionLocations, + removed = tableLocations.replace(location.getRegion().getStartKey(), regionLocations, updatedLocations); } if (removed) { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Registry.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Registry.java deleted file mode 100644 index 4d0527a6168..00000000000 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Registry.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hbase.client; - -import java.io.IOException; - -import org.apache.hadoop.hbase.RegionLocations; -import org.apache.yetus.audience.InterfaceAudience; - -/** - * Cluster registry. - * Implementations hold cluster information such as this cluster's id, location of hbase:meta, etc. - * Internal use only. - */ -@InterfaceAudience.Private -interface Registry { - /** - * @param connection - */ - void init(Connection connection); - - /** - * @return Meta region location - * @throws IOException - */ - RegionLocations getMetaRegionLocation() throws IOException; - - /** - * @return Cluster id. - */ - String getClusterId(); - - /** - * @return Count of 'running' regionservers - * @throws IOException - */ - int getCurrentNrHRS() throws IOException; -} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegistryFactory.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegistryFactory.java deleted file mode 100644 index 7b2ac0bf078..00000000000 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegistryFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hbase.client; - -import java.io.IOException; - -import org.apache.yetus.audience.InterfaceAudience; - -/** - * Get instance of configured Registry. - */ -@InterfaceAudience.Private -final class RegistryFactory { - static final String REGISTRY_IMPL_CONF_KEY = "hbase.client.registry.impl"; - - private RegistryFactory() {} - - /** - * @return The cluster registry implementation to use. - * @throws IOException - */ - static Registry getRegistry(final Connection connection) - throws IOException { - String registryClass = connection.getConfiguration().get(REGISTRY_IMPL_CONF_KEY, - ZooKeeperRegistry.class.getName()); - Registry registry = null; - try { - registry = (Registry)Class.forName(registryClass).newInstance(); - } catch (Throwable t) { - throw new IOException(t); - } - registry.init(connection); - return registry; - } -} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java index 9688ad3fbd0..fedd527b0f6 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java @@ -19,12 +19,12 @@ package org.apache.hadoop.hbase.client; import static org.apache.hadoop.hbase.HConstants.DEFAULT_ZK_SESSION_TIMEOUT; import static org.apache.hadoop.hbase.HConstants.ZK_SESSION_TIMEOUT; -import static org.apache.hadoop.hbase.HRegionInfo.DEFAULT_REPLICA_ID; -import static org.apache.hadoop.hbase.HRegionInfo.FIRST_META_REGIONINFO; +import static org.apache.hadoop.hbase.client.RegionInfo.DEFAULT_REPLICA_ID; +import static org.apache.hadoop.hbase.client.RegionInfoBuilder.FIRST_META_REGIONINFO; import static org.apache.hadoop.hbase.client.RegionReplicaUtil.getRegionInfoForDefaultReplica; import static org.apache.hadoop.hbase.client.RegionReplicaUtil.getRegionInfoForReplica; import static org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.lengthOfPBMagic; -import static org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.removeMetaData; +import static org.apache.hadoop.hbase.zookeeper.ZKMetadata.removeMetaData; import java.io.IOException; import java.util.concurrent.CompletableFuture; @@ -42,17 +42,18 @@ import org.apache.hadoop.hbase.ClusterId; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.RegionLocations; import org.apache.hadoop.hbase.ServerName; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.master.RegionState; -import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; -import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZNodePaths; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.data.Stat; +import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; +import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; + /** * Fetch the registry data from zookeeper. */ diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperKeepAliveConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperKeepAliveConnection.java deleted file mode 100644 index 34f7b236ed7..00000000000 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperKeepAliveConnection.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hbase.client; - - -import java.io.IOException; - -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; - -/** - * We inherit the current ZooKeeperWatcher implementation to change the semantic - * of the close: the new close won't immediately close the connection but - * will have a keep alive. See {@link ConnectionImplementation}. - * This allows to make it available with a consistent interface. The whole - * ZooKeeperWatcher use in ConnectionImplementation will be then changed to remove the - * watcher part. - * - * This class is intended to be used internally by HBase classes; but not by - * final user code. Hence it's package protected. - */ -class ZooKeeperKeepAliveConnection extends ZooKeeperWatcher{ - ZooKeeperKeepAliveConnection( - Configuration conf, String descriptor, - ConnectionImplementation conn) throws IOException { - super(conf, descriptor, conn); - } - - @Override - public void close() { - if (this.abortable != null) { - ((ConnectionImplementation)abortable).releaseZooKeeperWatcher(this); - } - } - - void internalClose(){ - super.close(); - } -} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperRegistry.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperRegistry.java deleted file mode 100644 index 746382f850d..00000000000 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZooKeeperRegistry.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hbase.client; - -import java.io.IOException; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hbase.HRegionLocation; -import org.apache.hadoop.hbase.RegionLocations; -import org.apache.hadoop.hbase.ServerName; -import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; -import org.apache.hadoop.hbase.zookeeper.ZKClusterId; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; -import org.apache.yetus.audience.InterfaceAudience; -import org.apache.zookeeper.KeeperException; - -/** - * A cluster registry that stores to zookeeper. - */ -@InterfaceAudience.Private -class ZooKeeperRegistry implements Registry { - private static final Log LOG = LogFactory.getLog(ZooKeeperRegistry.class); - // Needs an instance of hci to function. Set after construct this instance. - ConnectionImplementation hci; - - @Override - public void init(Connection connection) { - if (!(connection instanceof ConnectionImplementation)) { - throw new RuntimeException("This registry depends on ConnectionImplementation"); - } - this.hci = (ConnectionImplementation)connection; - } - - @Override - public RegionLocations getMetaRegionLocation() throws IOException { - ZooKeeperKeepAliveConnection zkw = hci.getKeepAliveZooKeeperWatcher(); - try { - if (LOG.isTraceEnabled()) { - LOG.trace("Looking up meta region location in ZK," + " connection=" + this); - } - List servers = new MetaTableLocator().blockUntilAvailable(zkw, hci.rpcTimeout, - hci.getConfiguration()); - if (LOG.isTraceEnabled()) { - if (servers == null) { - LOG.trace("Looked up meta region location, connection=" + this + - "; servers = null"); - } else { - StringBuilder str = new StringBuilder(); - for (ServerName s : servers) { - str.append(s.toString()); - str.append(" "); - } - LOG.trace("Looked up meta region location, connection=" + this + - "; servers = " + str.toString()); - } - } - if (servers == null) return null; - HRegionLocation[] locs = new HRegionLocation[servers.size()]; - int i = 0; - for (ServerName server : servers) { - RegionInfo h = RegionReplicaUtil.getRegionInfoForReplica( - RegionInfoBuilder.FIRST_META_REGIONINFO, i); - if (server == null) locs[i++] = null; - else locs[i++] = new HRegionLocation(h, server, 0); - } - return new RegionLocations(locs); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return null; - } finally { - zkw.close(); - } - } - - private String clusterId = null; - - @Override - public String getClusterId() { - if (this.clusterId != null) return this.clusterId; - // No synchronized here, worse case we will retrieve it twice, that's - // not an issue. - ZooKeeperKeepAliveConnection zkw = null; - try { - zkw = hci.getKeepAliveZooKeeperWatcher(); - this.clusterId = ZKClusterId.readClusterIdZNode(zkw); - if (this.clusterId == null) { - LOG.info("ClusterId read in ZooKeeper is null"); - } - } catch (KeeperException e) { - LOG.warn("Can't retrieve clusterId from ZooKeeper", e); - } catch (IOException e) { - LOG.warn("Can't retrieve clusterId from ZooKeeper", e); - } finally { - if (zkw != null) zkw.close(); - } - return this.clusterId; - } - - @Override - public int getCurrentNrHRS() throws IOException { - ZooKeeperKeepAliveConnection zkw = hci.getKeepAliveZooKeeperWatcher(); - try { - // We go to zk rather than to master to get count of regions to avoid - // HTable having a Master dependency. See HBase-2828 - return ZKUtil.getNumberOfChildren(zkw, zkw.znodePaths.rsZNode); - } catch (KeeperException ke) { - throw new IOException("Unexpected ZooKeeper exception", ke); - } finally { - zkw.close(); - } - } -} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java index 04e26629f30..fba637fbe63 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java @@ -100,7 +100,7 @@ public class MasterAddressTracker extends ZooKeeperNodeTracker { * @return info port or 0 if timed out or exceptions */ public int getBackupMasterInfoPort(final ServerName sn) { - String backupZNode = ZKUtil.joinZNode(watcher.znodePaths.backupMasterAddressesZNode, + String backupZNode = ZNodePaths.joinZNode(watcher.znodePaths.backupMasterAddressesZNode, sn.toString()); try { byte[] data = ZKUtil.getData(watcher, backupZNode); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java index 327bafbdc8f..94377c064d2 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java @@ -18,20 +18,24 @@ */ package org.apache.hadoop.hbase.zookeeper; +import static org.apache.hadoop.hbase.zookeeper.ZKMetadata.appendMetaData; +import static org.apache.hadoop.hbase.zookeeper.ZKMetadata.removeMetaData; + import java.io.IOException; import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -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.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.hadoop.hbase.util.EnvironmentEdgeManager; +import org.apache.htrace.Trace; +import org.apache.htrace.TraceScope; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; @@ -45,8 +49,6 @@ import org.apache.zookeeper.data.ACL; import org.apache.zookeeper.data.Stat; import org.apache.zookeeper.proto.CreateRequest; import org.apache.zookeeper.proto.SetDataRequest; -import org.apache.htrace.Trace; -import org.apache.htrace.TraceScope; /** * A zookeeper that can handle 'recoverable' errors. @@ -83,22 +85,8 @@ public class RecoverableZooKeeper { private Watcher watcher; private int sessionTimeout; private String quorumServers; - private final Random salter; private final ZooKeeperMetricsListener metrics; - // The metadata attached to each piece of data has the - // format: - // 1-byte constant - // 4-byte big-endian integer (length of next field) - // identifier corresponding uniquely to this process - // It is prepended to the data supplied by the user. - - // the magic number is to be backward compatible - private static final byte MAGIC =(byte) 0XFF; - private static final int MAGIC_SIZE = Bytes.SIZEOF_BYTE; - private static final int ID_LENGTH_OFFSET = MAGIC_SIZE; - private static final int ID_LENGTH_SIZE = Bytes.SIZEOF_INT; - public RecoverableZooKeeper(String quorumServers, int sessionTimeout, Watcher watcher, int maxRetries, int retryIntervalMillis, int maxSleepTime) throws IOException { @@ -129,7 +117,6 @@ public class RecoverableZooKeeper { this.quorumServers = quorumServers; this.metrics = new MetricsZooKeeper(); try {checkZk();} catch (Exception x) {/* ignore */} - salter = new Random(); } /** @@ -472,7 +459,7 @@ public class RecoverableZooKeeper { try { traceScope = Trace.startSpan("RecoverableZookeeper.setData"); RetryCounter retryCounter = retryCounterFactory.create(); - byte[] newData = appendMetaData(data); + byte[] newData = appendMetaData(id, data); boolean isRetry = false; long startTime; while (true) { @@ -622,7 +609,7 @@ public class RecoverableZooKeeper { TraceScope traceScope = null; try { traceScope = Trace.startSpan("RecoverableZookeeper.create"); - byte[] newData = appendMetaData(data); + byte[] newData = appendMetaData(id, data); switch (createMode) { case EPHEMERAL: case PERSISTENT: @@ -745,14 +732,14 @@ public class RecoverableZooKeeper { for (Op op : ops) { if (op.getType() == ZooDefs.OpCode.create) { CreateRequest create = (CreateRequest)op.toRequestRecord(); - preparedOps.add(Op.create(create.getPath(), appendMetaData(create.getData()), + preparedOps.add(Op.create(create.getPath(), appendMetaData(id, create.getData()), create.getAcl(), create.getFlags())); } else if (op.getType() == ZooDefs.OpCode.delete) { // no need to appendMetaData for delete preparedOps.add(op); } else if (op.getType() == ZooDefs.OpCode.setData) { SetDataRequest setData = (SetDataRequest)op.toRequestRecord(); - preparedOps.add(Op.setData(setData.getPath(), appendMetaData(setData.getData()), + preparedOps.add(Op.setData(setData.getPath(), appendMetaData(id, setData.getData()), setData.getVersion())); } else { throw new UnsupportedOperationException("Unexpected ZKOp type: " + op.getClass().getName()); @@ -822,41 +809,6 @@ public class RecoverableZooKeeper { return null; } - public static byte[] removeMetaData(byte[] data) { - if(data == null || data.length == 0) { - return data; - } - // check the magic data; to be backward compatible - byte magic = data[0]; - if(magic != MAGIC) { - return data; - } - - int idLength = Bytes.toInt(data, ID_LENGTH_OFFSET); - int dataLength = data.length-MAGIC_SIZE-ID_LENGTH_SIZE-idLength; - int dataOffset = MAGIC_SIZE+ID_LENGTH_SIZE+idLength; - - byte[] newData = new byte[dataLength]; - System.arraycopy(data, dataOffset, newData, 0, dataLength); - return newData; - } - - private byte[] appendMetaData(byte[] data) { - if(data == null || data.length == 0){ - return data; - } - byte[] salt = Bytes.toBytes(salter.nextLong()); - int idLength = id.length + salt.length; - byte[] newData = new byte[MAGIC_SIZE+ID_LENGTH_SIZE+idLength+data.length]; - int pos = 0; - pos = Bytes.putByte(newData, pos, MAGIC); - pos = Bytes.putInt(newData, pos, idLength); - pos = Bytes.putBytes(newData, pos, id, 0, id.length); - pos = Bytes.putBytes(newData, pos, salt, 0, salt.length); - pos = Bytes.putBytes(newData, pos, data, 0, data.length); - return newData; - } - public synchronized long getSessionId() { return zk == null ? -1 : zk.getSessionId(); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMetadata.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMetadata.java new file mode 100644 index 00000000000..5072706cb5a --- /dev/null +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKMetadata.java @@ -0,0 +1,80 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.zookeeper; + +import java.util.concurrent.ThreadLocalRandom; + +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.yetus.audience.InterfaceAudience; + +/** + * The metadata append to the start of data on zookeeper. + */ +@InterfaceAudience.Private +public class ZKMetadata { + + private ZKMetadata() { + } + + // The metadata attached to each piece of data has the format: + // 1-byte constant + // 4-byte big-endian integer (length of next field) + // identifier corresponding uniquely to this process + // It is prepended to the data supplied by the user. + + // the magic number is to be backward compatible + private static final byte MAGIC = (byte) 0XFF; + private static final int MAGIC_SIZE = Bytes.SIZEOF_BYTE; + private static final int ID_LENGTH_OFFSET = MAGIC_SIZE; + private static final int ID_LENGTH_SIZE = Bytes.SIZEOF_INT; + + public static byte[] appendMetaData(byte[] id, byte[] data) { + if (data == null || data.length == 0) { + return data; + } + byte[] salt = Bytes.toBytes(ThreadLocalRandom.current().nextLong()); + int idLength = id.length + salt.length; + byte[] newData = new byte[MAGIC_SIZE + ID_LENGTH_SIZE + idLength + data.length]; + int pos = 0; + pos = Bytes.putByte(newData, pos, MAGIC); + pos = Bytes.putInt(newData, pos, idLength); + pos = Bytes.putBytes(newData, pos, id, 0, id.length); + pos = Bytes.putBytes(newData, pos, salt, 0, salt.length); + pos = Bytes.putBytes(newData, pos, data, 0, data.length); + return newData; + } + + public static byte[] removeMetaData(byte[] data) { + if (data == null || data.length == 0) { + return data; + } + // check the magic data; to be backward compatible + byte magic = data[0]; + if (magic != MAGIC) { + return data; + } + + int idLength = Bytes.toInt(data, ID_LENGTH_OFFSET); + int dataLength = data.length - MAGIC_SIZE - ID_LENGTH_SIZE - idLength; + int dataOffset = MAGIC_SIZE + ID_LENGTH_SIZE + idLength; + + byte[] newData = new byte[dataLength]; + System.arraycopy(data, dataOffset, newData, 0, dataLength); + return newData; + } +} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java index 717d969936d..61a5a4290b1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java @@ -87,8 +87,6 @@ import org.apache.zookeeper.server.ZooKeeperSaslServer; public class ZKUtil { private static final Log LOG = LogFactory.getLog(ZKUtil.class); - // TODO: Replace this with ZooKeeper constant when ZOOKEEPER-277 is resolved. - public static final char ZNODE_PATH_SEPARATOR = '/'; private static int zkDumpConnectionTimeOut; /** @@ -302,28 +300,13 @@ public class ZKUtil { // // Helper methods // - - /** - * Join the prefix znode name with the suffix znode name to generate a proper - * full znode name. - * - * Assumes prefix does not end with slash and suffix does not begin with it. - * - * @param prefix beginning of znode name - * @param suffix ending of znode name - * @return result of properly joining prefix with suffix - */ - public static String joinZNode(String prefix, String suffix) { - return prefix + ZNODE_PATH_SEPARATOR + suffix; - } - /** * Returns the full path of the immediate parent of the specified node. * @param node path to get parent of * @return parent of path, null if passed the root node or an invalid node */ public static String getParent(String node) { - int idx = node.lastIndexOf(ZNODE_PATH_SEPARATOR); + int idx = node.lastIndexOf(ZNodePaths.ZNODE_PATH_SEPARATOR); return idx <= 0 ? null : node.substring(0, idx); } @@ -477,7 +460,7 @@ public class ZKUtil { return null; } for (String child : children) { - watchAndCheckExists(zkw, joinZNode(znode, child)); + watchAndCheckExists(zkw, ZNodePaths.joinZNode(znode, child)); } return children; } @@ -744,7 +727,7 @@ public class ZKUtil { if (nodes != null) { List newNodes = new ArrayList<>(); for (String node : nodes) { - String nodePath = ZKUtil.joinZNode(baseNode, node); + String nodePath = ZNodePaths.joinZNode(baseNode, node); byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath); newNodes.add(new NodeAndData(nodePath, data)); } @@ -1774,7 +1757,7 @@ public class ZKUtil { sb.append("\n").append(replicationZnode).append(": "); List children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode); for (String child : children) { - String znode = joinZNode(replicationZnode, child); + String znode = ZNodePaths.joinZNode(replicationZnode, child); if (znode.equals(zkw.znodePaths.peersZNode)) { appendPeersZnodes(zkw, znode, sb); } else if (znode.equals(zkw.znodePaths.queuesZNode)) { @@ -1789,7 +1772,7 @@ public class ZKUtil { StringBuilder sb) throws KeeperException { sb.append("\n").append(hfileRefsZnode).append(": "); for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) { - String znodeToProcess = ZKUtil.joinZNode(hfileRefsZnode, peerIdZnode); + String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode); sb.append("\n").append(znodeToProcess).append(": "); List peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess); int size = peerHFileRefsZnodes.size(); @@ -1839,7 +1822,7 @@ public class ZKUtil { } } for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) { - stack.add(ZKUtil.joinZNode(znodeToProcess, zNodeChild)); + stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild)); } } while (stack.size() > 0); } @@ -1849,7 +1832,7 @@ public class ZKUtil { int pblen = ProtobufUtil.lengthOfPBMagic(); sb.append("\n").append(peersZnode).append(": "); for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) { - String znodeToProcess = ZKUtil.joinZNode(peersZnode, peerIdZnode); + String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode); byte[] data; try { data = ZKUtil.getData(zkw, znodeToProcess); @@ -1879,7 +1862,7 @@ public class ZKUtil { int pblen = ProtobufUtil.lengthOfPBMagic(); for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) { if (!child.equals(peerState)) continue; - String peerStateZnode = ZKUtil.joinZNode(znodeToProcess, child); + String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child); sb.append("\n").append(peerStateZnode).append(": "); byte[] peerStateData; try { @@ -2042,7 +2025,7 @@ public class ZKUtil { if (children == null) return; for (String child : children) { LOG.debug(prefix + child); - String node = ZKUtil.joinZNode(root.equals("/") ? "" : root, child); + String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child); logZKTree(zkw, node, prefix + "---"); } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZNodePaths.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZNodePaths.java index 2a0764d259b..5954e947ddc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZNodePaths.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZNodePaths.java @@ -22,22 +22,24 @@ import static org.apache.hadoop.hbase.HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT; import static org.apache.hadoop.hbase.HConstants.META_REPLICAS_NUM; import static org.apache.hadoop.hbase.HConstants.SPLIT_LOGDIR_NAME; import static org.apache.hadoop.hbase.HConstants.ZOOKEEPER_ZNODE_PARENT; -import static org.apache.hadoop.hbase.HRegionInfo.DEFAULT_REPLICA_ID; - -import org.apache.hadoop.hbase.shaded.com.google.common.collect.ImmutableMap; +import static org.apache.hadoop.hbase.client.RegionInfo.DEFAULT_REPLICA_ID; import java.util.Optional; import java.util.stream.IntStream; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.HRegionInfo; +import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.yetus.audience.InterfaceAudience; +import org.apache.hadoop.hbase.shaded.com.google.common.collect.ImmutableMap; + /** * Class that hold all the paths of znode for HBase. */ @InterfaceAudience.Private public class ZNodePaths { + // TODO: Replace this with ZooKeeper constant when ZOOKEEPER-277 is resolved. + public static final char ZNODE_PATH_SEPARATOR = '/'; public final static String META_ZNODE_PREFIX = "meta-region-server"; @@ -90,43 +92,35 @@ public class ZNodePaths { baseZNode = conf.get(ZOOKEEPER_ZNODE_PARENT, DEFAULT_ZOOKEEPER_ZNODE_PARENT); ImmutableMap.Builder builder = ImmutableMap.builder(); metaZNodePrefix = conf.get("zookeeper.znode.metaserver", META_ZNODE_PREFIX); - String defaultMetaReplicaZNode = ZKUtil.joinZNode(baseZNode, metaZNodePrefix); + String defaultMetaReplicaZNode = ZNodePaths.joinZNode(baseZNode, metaZNodePrefix); builder.put(DEFAULT_REPLICA_ID, defaultMetaReplicaZNode); int numMetaReplicas = conf.getInt(META_REPLICAS_NUM, DEFAULT_META_REPLICA_NUM); IntStream.range(1, numMetaReplicas) .forEachOrdered(i -> builder.put(i, defaultMetaReplicaZNode + "-" + i)); metaReplicaZNodes = builder.build(); - rsZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.rs", "rs")); - drainingZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.draining.rs", "draining")); - masterAddressZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.master", "master")); - backupMasterAddressesZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.backup.masters", "backup-masters")); - clusterStateZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.state", "running")); - tableZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.tableEnableDisable", "table")); - clusterIdZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.clusterId", "hbaseid")); - splitLogZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.splitlog", SPLIT_LOGDIR_NAME)); - balancerZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.balancer", "balancer")); - regionNormalizerZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.regionNormalizer", "normalizer")); - switchZNode = ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.switch", "switch")); - tableLockZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.tableLock", "table-lock")); - namespaceZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.namespace", "namespace")); - masterMaintZNode = ZKUtil.joinZNode(baseZNode, - conf.get("zookeeper.znode.masterMaintenance", "master-maintenance")); - replicationZNode = - ZKUtil.joinZNode(baseZNode, conf.get("zookeeper.znode.replication", "replication")); + rsZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.rs", "rs")); + drainingZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.draining.rs", "draining")); + masterAddressZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.master", "master")); + backupMasterAddressesZNode = + joinZNode(baseZNode, conf.get("zookeeper.znode.backup.masters", "backup-masters")); + clusterStateZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.state", "running")); + tableZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.tableEnableDisable", "table")); + clusterIdZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.clusterId", "hbaseid")); + splitLogZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.splitlog", SPLIT_LOGDIR_NAME)); + balancerZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.balancer", "balancer")); + regionNormalizerZNode = + joinZNode(baseZNode, conf.get("zookeeper.znode.regionNormalizer", "normalizer")); + switchZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.switch", "switch")); + tableLockZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.tableLock", "table-lock")); + namespaceZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.namespace", "namespace")); + masterMaintZNode = + joinZNode(baseZNode, conf.get("zookeeper.znode.masterMaintenance", "master-maintenance")); + replicationZNode = joinZNode(baseZNode, conf.get("zookeeper.znode.replication", "replication")); peersZNode = - ZKUtil.joinZNode(replicationZNode, conf.get("zookeeper.znode.replication.peers", "peers")); - queuesZNode = - ZKUtil.joinZNode(replicationZNode, conf.get("zookeeper.znode.replication.rs", "rs")); - hfileRefsZNode = - ZKUtil.joinZNode(replicationZNode, - conf.get("zookeeper.znode.replication.hfile.refs", "hfile-refs")); + joinZNode(replicationZNode, conf.get("zookeeper.znode.replication.peers", "peers")); + queuesZNode = joinZNode(replicationZNode, conf.get("zookeeper.znode.replication.rs", "rs")); + hfileRefsZNode = joinZNode(replicationZNode, + conf.get("zookeeper.znode.replication.hfile.refs", "hfile-refs")); } @Override @@ -175,7 +169,7 @@ public class ZNodePaths { */ public int getMetaReplicaIdFromZnode(String znode) { if (znode.equals(metaZNodePrefix)) { - return HRegionInfo.DEFAULT_REPLICA_ID; + return RegionInfo.DEFAULT_REPLICA_ID; } return Integer.parseInt(znode.substring(metaZNodePrefix.length() + 1)); } @@ -188,4 +182,18 @@ public class ZNodePaths { public boolean isDefaultMetaReplicaZnode(String znode) { return metaReplicaZNodes.get(DEFAULT_REPLICA_ID).equals(znode); } + + /** + * Join the prefix znode name with the suffix znode name to generate a proper + * full znode name. + * + * Assumes prefix does not end with slash and suffix does not begin with it. + * + * @param prefix beginning of znode name + * @param suffix ending of znode name + * @return result of properly joining prefix with suffix + */ + public static String joinZNode(String prefix, String suffix) { + return prefix + ZNodePaths.ZNODE_PATH_SEPARATOR + suffix; + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZkAclReset.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZkAclReset.java index 3df9880a776..045fd973361 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZkAclReset.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZkAclReset.java @@ -51,7 +51,7 @@ public class ZkAclReset extends Configured implements Tool { List children = ZKUtil.listChildrenNoWatch(zkw, znode); if (children != null) { for (String child: children) { - resetAcls(zkw, ZKUtil.joinZNode(znode, child), eraseAcls); + resetAcls(zkw, ZNodePaths.joinZNode(znode, child), eraseAcls); } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java index 49113d0cc21..5d10cdf3351 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java @@ -221,7 +221,7 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable { List children = recoverableZooKeeper.getChildren(znode, false); for (String child : children) { - setZnodeAclsRecursive(ZKUtil.joinZNode(znode, child)); + setZnodeAclsRecursive(ZNodePaths.joinZNode(znode, child)); } List acls = ZKUtil.createACL(this, znode, true); LOG.info("Setting ACLs for znode:" + znode + " , acl:" + acls); diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/DoNothingAsyncRegistry.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/DoNothingAsyncRegistry.java new file mode 100644 index 00000000000..66330687a26 --- /dev/null +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/DoNothingAsyncRegistry.java @@ -0,0 +1,64 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.client; + +import java.util.concurrent.CompletableFuture; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.RegionLocations; +import org.apache.hadoop.hbase.ServerName; +import org.apache.yetus.audience.InterfaceAudience; + +/** + * Registry that does nothing. Otherwise, default Registry wants zookeeper up and running. + */ +@InterfaceAudience.Private +class DoNothingAsyncRegistry implements AsyncRegistry { + + public DoNothingAsyncRegistry(Configuration conf) { + } + + @Override + public CompletableFuture getMetaRegionLocation() { + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture getClusterId() { + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture getCurrentNrHRS() { + return CompletableFuture.completedFuture(0); + } + + @Override + public CompletableFuture getMasterAddress() { + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture getMasterInfoPort() { + return CompletableFuture.completedFuture(0); + } + + @Override + public void close() { + } +} diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java index a0f18f4e894..f9fbe85b465 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java @@ -37,6 +37,7 @@ import java.util.Random; import java.util.Set; import java.util.TreeSet; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -456,23 +457,20 @@ public class TestAsyncProcess { * Returns our async process. */ static class MyConnectionImpl extends ConnectionImplementation { - public static class TestRegistry implements Registry { - @Override - public void init(Connection connection) {} + public static class TestRegistry extends DoNothingAsyncRegistry { - @Override - public RegionLocations getMetaRegionLocation() throws IOException { - return null; + public TestRegistry(Configuration conf) { + super(conf); } @Override - public String getClusterId() { - return "testClusterId"; + public CompletableFuture getClusterId() { + return CompletableFuture.completedFuture("testClusterId"); } @Override - public int getCurrentNrHRS() throws IOException { - return 1; + public CompletableFuture getCurrentNrHRS() { + return CompletableFuture.completedFuture(1); } } @@ -483,7 +481,8 @@ public class TestAsyncProcess { } private static Configuration setupConf(Configuration conf) { - conf.setClass(RegistryFactory.REGISTRY_IMPL_CONF_KEY, TestRegistry.class, Registry.class); + conf.setClass(AsyncRegistryFactory.REGISTRY_IMPL_CONF_KEY, TestRegistry.class, + AsyncRegistry.class); return conf; } diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestBufferedMutator.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestBufferedMutator.java index d1a3eb9e5cc..50befce82ae 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestBufferedMutator.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestBufferedMutator.java @@ -17,14 +17,12 @@ */ package org.apache.hadoop.hbase.client; - import static org.junit.Assert.assertTrue; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; -import org.apache.hadoop.hbase.RegionLocations; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; import org.apache.hadoop.hbase.testclassification.ClientTests; @@ -39,35 +37,6 @@ public class TestBufferedMutator { @Rule public TestName name = new TestName(); - /** - * Registry that does nothing. - * Otherwise, default Registry wants zookeeper up and running. - */ - public static class DoNothingRegistry implements Registry { - @Override - public void init(Connection connection) { - // TODO Auto-generated method stub - } - - @Override - public RegionLocations getMetaRegionLocation() throws IOException { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getClusterId() { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getCurrentNrHRS() throws IOException { - // TODO Auto-generated method stub - return 0; - } - } - /** * My BufferedMutator. * Just to prove that I can insert a BM other than default. @@ -83,7 +52,7 @@ public class TestBufferedMutator { public void testAlternateBufferedMutatorImpl() throws IOException { BufferedMutatorParams params = new BufferedMutatorParams(TableName.valueOf(name.getMethodName())); Configuration conf = HBaseConfiguration.create(); - conf.set(RegistryFactory.REGISTRY_IMPL_CONF_KEY, DoNothingRegistry.class.getName()); + conf.set(AsyncRegistryFactory.REGISTRY_IMPL_CONF_KEY, DoNothingAsyncRegistry.class.getName()); try (Connection connection = ConnectionFactory.createConnection(conf)) { BufferedMutator bm = connection.getBufferedMutator(params); // Assert we get default BM if nothing specified. diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java index 0f111560049..9f3297626a8 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java @@ -27,18 +27,20 @@ import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.SortedMap; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -import org.apache.hadoop.hbase.CellComparatorImpl; -import org.apache.hadoop.hbase.DoNotRetryIOException; + import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; +import org.apache.hadoop.hbase.CellComparatorImpl; +import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionInfo; @@ -49,6 +51,26 @@ import org.apache.hadoop.hbase.RegionLocations; import org.apache.hadoop.hbase.RegionTooBusyException; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException; +import org.apache.hadoop.hbase.security.User; +import org.apache.hadoop.hbase.testclassification.ClientTests; +import org.apache.hadoop.hbase.testclassification.SmallTests; +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.util.Threads; +import org.apache.hadoop.util.Tool; +import org.apache.hadoop.util.ToolRunner; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.mockito.Mockito; + +import org.apache.hadoop.hbase.shaded.com.google.common.base.Stopwatch; +import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString; +import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController; +import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; +import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations; import org.apache.hadoop.hbase.shaded.protobuf.generated.CellProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest; @@ -73,26 +95,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrEx import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType; -import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException; -import org.apache.hadoop.hbase.security.User; -import org.apache.hadoop.hbase.testclassification.ClientTests; -import org.apache.hadoop.hbase.testclassification.SmallTests; -import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.hbase.util.Pair; -import org.apache.hadoop.hbase.util.Threads; -import org.apache.hadoop.util.Tool; -import org.apache.hadoop.util.ToolRunner; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.mockito.Mockito; - -import org.apache.hadoop.hbase.shaded.com.google.common.base.Stopwatch; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException; -import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations; /** * Test client behavior w/o setting up a cluster. @@ -117,27 +119,27 @@ public class TestClientNoCluster extends Configured implements Tool { /** * Simple cluster registry inserted in place of our usual zookeeper based one. */ - static class SimpleRegistry implements Registry { + static class SimpleRegistry extends DoNothingAsyncRegistry { final ServerName META_HOST = META_SERVERNAME; - @Override - public void init(Connection connection) { + public SimpleRegistry(Configuration conf) { + super(conf); } @Override - public RegionLocations getMetaRegionLocation() throws IOException { - return new RegionLocations( - new HRegionLocation(HRegionInfo.FIRST_META_REGIONINFO, META_HOST)); + public CompletableFuture getMetaRegionLocation() { + return CompletableFuture.completedFuture(new RegionLocations( + new HRegionLocation(RegionInfoBuilder.FIRST_META_REGIONINFO, META_HOST))); } @Override - public String getClusterId() { - return HConstants.CLUSTER_ID_DEFAULT; + public CompletableFuture getClusterId() { + return CompletableFuture.completedFuture(HConstants.CLUSTER_ID_DEFAULT); } @Override - public int getCurrentNrHRS() throws IOException { - return 1; + public CompletableFuture getCurrentNrHRS() { + return CompletableFuture.completedFuture(1); } } diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperWatcher.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperWatcher.java index 4b6ef9683ac..3c99175ad81 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperWatcher.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperWatcher.java @@ -15,7 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.hadoop.hbase.zookeeper; import static org.junit.Assert.assertFalse; @@ -33,15 +32,16 @@ public class TestZooKeeperWatcher { @Test public void testIsClientReadable() throws IOException { - ZooKeeperWatcher watcher = new ZooKeeperWatcher(HBaseConfiguration.create(), - "testIsClientReadable", null, false); + ZooKeeperWatcher watcher = + new ZooKeeperWatcher(HBaseConfiguration.create(), "testIsClientReadable", null, false); assertTrue(watcher.isClientReadable(watcher.znodePaths.baseZNode)); assertTrue(watcher.isClientReadable(watcher.znodePaths.getZNodeForReplica(0))); assertTrue(watcher.isClientReadable(watcher.znodePaths.masterAddressZNode)); assertTrue(watcher.isClientReadable(watcher.znodePaths.clusterIdZNode)); assertTrue(watcher.isClientReadable(watcher.znodePaths.tableZNode)); - assertTrue(watcher.isClientReadable(ZKUtil.joinZNode(watcher.znodePaths.tableZNode, "foo"))); + assertTrue( + watcher.isClientReadable(ZNodePaths.joinZNode(watcher.znodePaths.tableZNode, "foo"))); assertTrue(watcher.isClientReadable(watcher.znodePaths.rsZNode)); assertFalse(watcher.isClientReadable(watcher.znodePaths.tableLockZNode)); @@ -54,5 +54,4 @@ public class TestZooKeeperWatcher { watcher.close(); } - } diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java index 667daa8e549..eba8518515e 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.regionserver.StorefileRefresherChore; import org.apache.hadoop.hbase.testclassification.IntegrationTests; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -63,7 +64,7 @@ public class IntegrationTestMetaReplicas { Configuration conf = util.getConfiguration(); String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); - String primaryMetaZnode = ZKUtil.joinZNode(baseZNode, + String primaryMetaZnode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.metaserver", "meta-region-server")); // check that the data in the znode is parseable (this would also mean the znode exists) byte[] data = ZKUtil.getData(zkw, primaryMetaZnode); diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.java index 0d85e4273b3..92bad7fbf77 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.java @@ -39,6 +39,7 @@ import org.apache.hadoop.hbase.util.AbstractHBaseTool; import org.apache.hadoop.hbase.util.FSUtils; import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.util.ToolRunner; import org.apache.zookeeper.KeeperException; @@ -165,7 +166,7 @@ public class IntegrationTestZKAndFSPermissions extends AbstractHBaseTool { List children = zk.getChildren(znode, false); for (String child : children) { - checkZnodePermsRecursive(watcher, zk, ZKUtil.joinZNode(znode, child)); + checkZnodePermsRecursive(watcher, zk, ZNodePaths.joinZNode(znode, child)); } } catch (KeeperException ke) { // if we are not authenticated for listChildren, it is fine. diff --git a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java index ca545f78802..0f39b2afa44 100644 --- a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java +++ b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java @@ -44,6 +44,7 @@ import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZKUtil; import org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -152,7 +153,7 @@ public class ReplicationPeersZKImpl extends ReplicationStateZKBase implements Re throw new IllegalArgumentException("Cannot remove peer with id=" + id + " because that id does not exist."); } - ZKUtil.deleteNodeRecursively(this.zookeeper, ZKUtil.joinZNode(this.peersZNode, id)); + ZKUtil.deleteNodeRecursively(this.zookeeper, ZNodePaths.joinZNode(this.peersZNode, id)); } catch (KeeperException e) { throw new ReplicationException("Could not remove peer with id=" + id, e); } diff --git a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java index 95b2e04d2ea..49e55ef767b 100644 --- a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java +++ b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java @@ -29,6 +29,7 @@ import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.data.Stat; @@ -61,8 +62,8 @@ public class ReplicationQueuesClientZKImpl extends ReplicationStateZKBase implem @Override public List getLogsInQueue(String serverName, String queueId) throws KeeperException { - String znode = ZKUtil.joinZNode(this.queuesZNode, serverName); - znode = ZKUtil.joinZNode(znode, queueId); + String znode = ZNodePaths.joinZNode(this.queuesZNode, serverName); + znode = ZNodePaths.joinZNode(znode, queueId); List result = null; try { result = ZKUtil.listChildrenNoWatch(this.zookeeper, znode); @@ -76,7 +77,7 @@ public class ReplicationQueuesClientZKImpl extends ReplicationStateZKBase implem @Override public List getAllQueues(String serverName) throws KeeperException { - String znode = ZKUtil.joinZNode(this.queuesZNode, serverName); + String znode = ZNodePaths.joinZNode(this.queuesZNode, serverName); List result = null; try { result = ZKUtil.listChildrenNoWatch(this.zookeeper, znode); @@ -162,7 +163,7 @@ public class ReplicationQueuesClientZKImpl extends ReplicationStateZKBase implem @Override public List getReplicableHFiles(String peerId) throws KeeperException { - String znode = ZKUtil.joinZNode(this.hfileRefsZNode, peerId); + String znode = ZNodePaths.joinZNode(this.hfileRefsZNode, peerId); List result = null; try { result = ZKUtil.listChildrenNoWatch(this.zookeeper, znode); diff --git a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.java b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.java index 8e61df94192..7b1d5c2d24a 100644 --- a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.java +++ b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.java @@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.zookeeper.ZKUtil; import org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -81,7 +82,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void init(String serverName) throws ReplicationException { - this.myQueuesZnode = ZKUtil.joinZNode(this.queuesZNode, serverName); + this.myQueuesZnode = ZNodePaths.joinZNode(this.queuesZNode, serverName); try { if (ZKUtil.checkExists(this.zookeeper, this.myQueuesZnode) < 0) { ZKUtil.createWithParents(this.zookeeper, this.myQueuesZnode); @@ -105,7 +106,8 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void removeQueue(String queueId) { try { - ZKUtil.deleteNodeRecursively(this.zookeeper, ZKUtil.joinZNode(this.myQueuesZnode, queueId)); + ZKUtil.deleteNodeRecursively(this.zookeeper, + ZNodePaths.joinZNode(this.myQueuesZnode, queueId)); } catch (KeeperException e) { this.abortable.abort("Failed to delete queue (queueId=" + queueId + ")", e); } @@ -113,8 +115,8 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void addLog(String queueId, String filename) throws ReplicationException { - String znode = ZKUtil.joinZNode(this.myQueuesZnode, queueId); - znode = ZKUtil.joinZNode(znode, filename); + String znode = ZNodePaths.joinZNode(this.myQueuesZnode, queueId); + znode = ZNodePaths.joinZNode(znode, filename); try { ZKUtil.createWithParents(this.zookeeper, znode); } catch (KeeperException e) { @@ -127,8 +129,8 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void removeLog(String queueId, String filename) { try { - String znode = ZKUtil.joinZNode(this.myQueuesZnode, queueId); - znode = ZKUtil.joinZNode(znode, filename); + String znode = ZNodePaths.joinZNode(this.myQueuesZnode, queueId); + znode = ZNodePaths.joinZNode(znode, filename); ZKUtil.deleteNode(this.zookeeper, znode); } catch (KeeperException e) { this.abortable.abort("Failed to remove wal from queue (queueId=" + queueId + ", filename=" @@ -139,8 +141,8 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void setLogPosition(String queueId, String filename, long position) { try { - String znode = ZKUtil.joinZNode(this.myQueuesZnode, queueId); - znode = ZKUtil.joinZNode(znode, filename); + String znode = ZNodePaths.joinZNode(this.myQueuesZnode, queueId); + znode = ZNodePaths.joinZNode(znode, filename); // Why serialize String of Long and not Long as bytes? ZKUtil.setData(this.zookeeper, znode, ZKUtil.positionToByteArray(position)); } catch (KeeperException e) { @@ -151,8 +153,8 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public long getLogPosition(String queueId, String filename) throws ReplicationException { - String clusterZnode = ZKUtil.joinZNode(this.myQueuesZnode, queueId); - String znode = ZKUtil.joinZNode(clusterZnode, filename); + String clusterZnode = ZNodePaths.joinZNode(this.myQueuesZnode, queueId); + String znode = ZNodePaths.joinZNode(clusterZnode, filename); byte[] bytes = null; try { bytes = ZKUtil.getData(this.zookeeper, znode); @@ -176,7 +178,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public boolean isThisOurRegionServer(String regionserver) { - return ZKUtil.joinZNode(this.queuesZNode, regionserver).equals(this.myQueuesZnode); + return ZNodePaths.joinZNode(this.queuesZNode, regionserver).equals(this.myQueuesZnode); } @Override @@ -184,7 +186,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R if (isThisOurRegionServer(regionserver)) { return null; } - String rsZnodePath = ZKUtil.joinZNode(this.queuesZNode, regionserver); + String rsZnodePath = ZNodePaths.joinZNode(this.queuesZNode, regionserver); List queues = null; try { queues = ZKUtil.listChildrenNoWatch(this.zookeeper, rsZnodePath); @@ -202,7 +204,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void removeReplicatorIfQueueIsEmpty(String regionserver) { - String rsPath = ZKUtil.joinZNode(this.queuesZNode, regionserver); + String rsPath = ZNodePaths.joinZNode(this.queuesZNode, regionserver); try { List list = ZKUtil.listChildrenNoWatch(this.zookeeper, rsPath); if (list != null && list.isEmpty()){ @@ -229,7 +231,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public List getLogsInQueue(String queueId) { - String znode = ZKUtil.joinZNode(this.myQueuesZnode, queueId); + String znode = ZNodePaths.joinZNode(this.myQueuesZnode, queueId); List result = null; try { result = ZKUtil.listChildrenNoWatch(this.zookeeper, znode); @@ -260,21 +262,21 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R private Pair> moveQueueUsingMulti(String znode, String peerId) { try { // hbase/replication/rs/deadrs - String deadRSZnodePath = ZKUtil.joinZNode(this.queuesZNode, znode); + String deadRSZnodePath = ZNodePaths.joinZNode(this.queuesZNode, znode); List listOfOps = new ArrayList<>(); ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(peerId); String newPeerId = peerId + "-" + znode; - String newPeerZnode = ZKUtil.joinZNode(this.myQueuesZnode, newPeerId); + String newPeerZnode = ZNodePaths.joinZNode(this.myQueuesZnode, newPeerId); // check the logs queue for the old peer cluster - String oldClusterZnode = ZKUtil.joinZNode(deadRSZnodePath, peerId); + String oldClusterZnode = ZNodePaths.joinZNode(deadRSZnodePath, peerId); List wals = ZKUtil.listChildrenNoWatch(this.zookeeper, oldClusterZnode); if (!peerExists(replicationQueueInfo.getPeerId())) { LOG.warn("Peer " + replicationQueueInfo.getPeerId() + " didn't exist, will move its queue to avoid the failure of multi op"); for (String wal : wals) { - String oldWalZnode = ZKUtil.joinZNode(oldClusterZnode, wal); + String oldWalZnode = ZNodePaths.joinZNode(oldClusterZnode, wal); listOfOps.add(ZKUtilOp.deleteNodeFailSilent(oldWalZnode)); } listOfOps.add(ZKUtilOp.deleteNodeFailSilent(oldClusterZnode)); @@ -291,10 +293,10 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R listOfOps.add(op); // get the offset of the logs and set it to new znodes for (String wal : wals) { - String oldWalZnode = ZKUtil.joinZNode(oldClusterZnode, wal); + String oldWalZnode = ZNodePaths.joinZNode(oldClusterZnode, wal); byte[] logOffset = ZKUtil.getData(this.zookeeper, oldWalZnode); LOG.debug("Creating " + wal + " with data " + Bytes.toString(logOffset)); - String newLogZnode = ZKUtil.joinZNode(newPeerZnode, wal); + String newLogZnode = ZNodePaths.joinZNode(newPeerZnode, wal); listOfOps.add(ZKUtilOp.createAndFailSilent(newLogZnode, logOffset)); listOfOps.add(ZKUtilOp.deleteNodeFailSilent(oldWalZnode)); logQueue.add(wal); @@ -322,7 +324,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void addHFileRefs(String peerId, List> pairs) throws ReplicationException { - String peerZnode = ZKUtil.joinZNode(this.hfileRefsZNode, peerId); + String peerZnode = ZNodePaths.joinZNode(this.hfileRefsZNode, peerId); boolean debugEnabled = LOG.isDebugEnabled(); if (debugEnabled) { LOG.debug("Adding hfile references " + pairs + " in queue " + peerZnode); @@ -333,7 +335,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R for (int i = 0; i < size; i++) { listOfOps.add(ZKUtilOp.createAndFailSilent( - ZKUtil.joinZNode(peerZnode, pairs.get(i).getSecond().getName()), + ZNodePaths.joinZNode(peerZnode, pairs.get(i).getSecond().getName()), HConstants.EMPTY_BYTE_ARRAY)); } if (debugEnabled) { @@ -349,7 +351,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void removeHFileRefs(String peerId, List files) { - String peerZnode = ZKUtil.joinZNode(this.hfileRefsZNode, peerId); + String peerZnode = ZNodePaths.joinZNode(this.hfileRefsZNode, peerId); boolean debugEnabled = LOG.isDebugEnabled(); if (debugEnabled) { LOG.debug("Removing hfile references " + files + " from queue " + peerZnode); @@ -359,7 +361,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R List listOfOps = new ArrayList<>(size); for (int i = 0; i < size; i++) { - listOfOps.add(ZKUtilOp.deleteNodeFailSilent(ZKUtil.joinZNode(peerZnode, files.get(i)))); + listOfOps.add(ZKUtilOp.deleteNodeFailSilent(ZNodePaths.joinZNode(peerZnode, files.get(i)))); } if (debugEnabled) { LOG.debug(" The multi list size for removing hfile references in zk for node " + peerZnode @@ -374,7 +376,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void addPeerToHFileRefs(String peerId) throws ReplicationException { - String peerZnode = ZKUtil.joinZNode(this.hfileRefsZNode, peerId); + String peerZnode = ZNodePaths.joinZNode(this.hfileRefsZNode, peerId); try { if (ZKUtil.checkExists(this.zookeeper, peerZnode) == -1) { LOG.info("Adding peer " + peerId + " to hfile reference queue."); @@ -388,7 +390,7 @@ public class ReplicationQueuesZKImpl extends ReplicationStateZKBase implements R @Override public void removePeerFromHFileRefs(String peerId) { - final String peerZnode = ZKUtil.joinZNode(this.hfileRefsZNode, peerId); + final String peerZnode = ZNodePaths.joinZNode(this.hfileRefsZNode, peerId); try { if (ZKUtil.checkExists(this.zookeeper, peerZnode) == -1) { if (LOG.isDebugEnabled()) { diff --git a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationStateZKBase.java b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationStateZKBase.java index c6501e189d1..e96401e2a7d 100644 --- a/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationStateZKBase.java +++ b/hbase-replication/src/main/java/org/apache/hadoop/hbase/replication/ReplicationStateZKBase.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -87,11 +88,11 @@ public abstract class ReplicationStateZKBase { this.peerStateNodeName = conf.get("zookeeper.znode.replication.peers.state", "peer-state"); this.tableCFsNodeName = conf.get("zookeeper.znode.replication.peers.tableCFs", "tableCFs"); this.ourClusterKey = ZKConfig.getZooKeeperClusterKey(this.conf); - this.replicationZNode = ZKUtil.joinZNode(this.zookeeper.znodePaths.baseZNode, + this.replicationZNode = ZNodePaths.joinZNode(this.zookeeper.znodePaths.baseZNode, replicationZNodeName); - this.peersZNode = ZKUtil.joinZNode(replicationZNode, peersZNodeName); - this.queuesZNode = ZKUtil.joinZNode(replicationZNode, queuesZNodeName); - this.hfileRefsZNode = ZKUtil.joinZNode(replicationZNode, hfileRefsZNodeName); + this.peersZNode = ZNodePaths.joinZNode(replicationZNode, peersZNodeName); + this.queuesZNode = ZNodePaths.joinZNode(replicationZNode, queuesZNodeName); + this.hfileRefsZNode = ZNodePaths.joinZNode(replicationZNode, hfileRefsZNodeName); } public List getListOfReplicators() { @@ -127,7 +128,7 @@ public abstract class ReplicationStateZKBase { } protected boolean peerExists(String id) throws KeeperException { - return ZKUtil.checkExists(this.zookeeper, ZKUtil.joinZNode(this.peersZNode, id)) >= 0; + return ZKUtil.checkExists(this.zookeeper, ZNodePaths.joinZNode(this.peersZNode, id)) >= 0; } /** @@ -141,15 +142,15 @@ public abstract class ReplicationStateZKBase { @VisibleForTesting protected String getTableCFsNode(String id) { - return ZKUtil.joinZNode(this.peersZNode, ZKUtil.joinZNode(id, this.tableCFsNodeName)); + return ZNodePaths.joinZNode(this.peersZNode, ZNodePaths.joinZNode(id, this.tableCFsNodeName)); } @VisibleForTesting protected String getPeerStateNode(String id) { - return ZKUtil.joinZNode(this.peersZNode, ZKUtil.joinZNode(id, this.peerStateNodeName)); + return ZNodePaths.joinZNode(this.peersZNode, ZNodePaths.joinZNode(id, this.peerStateNodeName)); } @VisibleForTesting protected String getPeerNode(String id) { - return ZKUtil.joinZNode(this.peersZNode, id); + return ZNodePaths.joinZNode(this.peersZNode, id); } } diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java index 7cf04c7cc09..3d152bb1ee2 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java @@ -77,6 +77,7 @@ import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy; import org.apache.hadoop.hbase.security.access.AccessControlLists; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; @@ -319,13 +320,13 @@ class RSGroupInfoManagerImpl implements RSGroupInfoManager { } List retrieveGroupListFromZookeeper() throws IOException { - String groupBasePath = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode); + String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode); List RSGroupInfoList = Lists.newArrayList(); //Overwrite any info stored by table, this takes precedence try { if(ZKUtil.checkExists(watcher, groupBasePath) != -1) { for(String znode: ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath)) { - byte[] data = ZKUtil.getData(watcher, ZKUtil.joinZNode(groupBasePath, znode)); + byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode)); if(data.length > 0) { ProtobufUtil.expectPBMagicPrefix(data); ByteArrayInputStream bis = new ByteArrayInputStream( @@ -469,20 +470,20 @@ class RSGroupInfoManagerImpl implements RSGroupInfoManager { resetRSGroupAndTableMaps(newGroupMap, newTableMap); try { - String groupBasePath = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode); + String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode); ZKUtil.createAndFailSilent(watcher, groupBasePath, ProtobufMagic.PB_MAGIC); List zkOps = new ArrayList<>(newGroupMap.size()); for(String groupName : prevRSGroups) { if(!newGroupMap.containsKey(groupName)) { - String znode = ZKUtil.joinZNode(groupBasePath, groupName); + String znode = ZNodePaths.joinZNode(groupBasePath, groupName); zkOps.add(ZKUtil.ZKUtilOp.deleteNodeFailSilent(znode)); } } for (RSGroupInfo RSGroupInfo : newGroupMap.values()) { - String znode = ZKUtil.joinZNode(groupBasePath, RSGroupInfo.getName()); + String znode = ZNodePaths.joinZNode(groupBasePath, RSGroupInfo.getName()); RSGroupProtos.RSGroupInfo proto = RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo); LOG.debug("Updating znode: "+znode); ZKUtil.createAndFailSilent(watcher, znode); diff --git a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.java b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.java index ea019bc7451..9077f152304 100644 --- a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.java +++ b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.net.Address; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.Assert; @@ -124,9 +125,9 @@ public class VerifyingRSGroupAdminClient implements RSGroupAdmin { Assert.assertEquals(Sets.newHashSet(groupMap.values()), Sets.newHashSet(wrapped.listRSGroups())); try { - String groupBasePath = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "rsgroup"); + String groupBasePath = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "rsgroup"); for(String znode: ZKUtil.listChildrenNoWatch(zkw, groupBasePath)) { - byte[] data = ZKUtil.getData(zkw, ZKUtil.joinZNode(groupBasePath, znode)); + byte[] data = ZKUtil.getData(zkw, ZNodePaths.joinZNode(groupBasePath, znode)); if(data.length > 0) { ProtobufUtil.expectPBMagicPrefix(data); ByteArrayInputStream bis = new ByteArrayInputStream( diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ZKNamespaceManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ZKNamespaceManager.java index 6e402959404..c4fad44e259 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ZKNamespaceManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ZKNamespaceManager.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -165,7 +166,7 @@ public class ZKNamespaceManager extends ZooKeeperListener { } private void deleteNamespace(String name) throws IOException { - String zNode = ZKUtil.joinZNode(nsZNode, name); + String zNode = ZNodePaths.joinZNode(nsZNode, name); try { ZKUtil.deleteNode(watcher, zNode); } catch (KeeperException e) { @@ -180,7 +181,7 @@ public class ZKNamespaceManager extends ZooKeeperListener { } private void writeNamespace(NamespaceDescriptor ns) throws IOException { - String zNode = ZKUtil.joinZNode(nsZNode, ns.getName()); + String zNode = ZNodePaths.joinZNode(nsZNode, ns.getName()); try { ZKUtil.createWithParents(watcher, zNode); ZKUtil.updateExistingNodeData(watcher, zNode, diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ZNodeClearer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ZNodeClearer.java index 5b3278ff0ee..d7fdeb72b02 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ZNodeClearer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ZNodeClearer.java @@ -32,6 +32,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer; import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -181,11 +182,12 @@ public class ZNodeClearer { String znodeFileContent; try { znodeFileContent = ZNodeClearer.readMyEphemeralNodeOnDisk(); - if(ZNodeClearer.tablesOnMaster(conf)) { - //In case of master crash also remove rsZnode since master is also regionserver - ZKUtil.deleteNodeFailSilent(zkw, ZKUtil.joinZNode(zkw.znodePaths.rsZNode,znodeFileContent)); - return MasterAddressTracker.deleteIfEquals(zkw, - ZNodeClearer.parseMasterServerName(znodeFileContent)); + if (ZNodeClearer.tablesOnMaster(conf)) { + // In case of master crash also remove rsZnode since master is also regionserver + ZKUtil.deleteNodeFailSilent(zkw, + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, znodeFileContent)); + return MasterAddressTracker.deleteIfEquals(zkw, + ZNodeClearer.parseMasterServerName(znodeFileContent)); } else { return MasterAddressTracker.deleteIfEquals(zkw, znodeFileContent); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java index 61d6a0288e3..d26199319c3 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java @@ -27,6 +27,7 @@ import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -164,6 +165,6 @@ class HFileArchiveManager { * @return znode for the table's archive status */ private String getTableNode(byte[] table) { - return ZKUtil.joinZNode(archiveZnode, Bytes.toString(table)); + return ZNodePaths.joinZNode(archiveZnode, Bytes.toString(table)); } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.java index 6c173cf0f93..9a7903a6431 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.java @@ -24,7 +24,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -149,7 +149,7 @@ public class ZKTableArchiveClient extends Configured { * @return get the znode for long-term archival of a table for */ public static String getArchiveZNode(Configuration conf, ZooKeeperWatcher zooKeeper) { - return ZKUtil.joinZNode(zooKeeper.znodePaths.baseZNode, conf.get( + return ZNodePaths.joinZNode(zooKeeper.znodePaths.baseZNode, conf.get( ZOOKEEPER_ZNODE_HFILE_ARCHIVE_KEY, TableHFileArchiveTracker.HFILE_ARCHIVE_ZNODE_PARENT)); } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java index 8073d640766..c19c3a566fd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java @@ -41,12 +41,12 @@ import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.master.SplitLogManager.ResubmitDirective; import org.apache.hadoop.hbase.master.SplitLogManager.Task; import org.apache.hadoop.hbase.master.SplitLogManager.TerminationStatus; -import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.wal.WALSplitter; -import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper; +import org.apache.hadoop.hbase.zookeeper.ZKMetadata; import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.util.StringUtils; @@ -58,6 +58,8 @@ import org.apache.zookeeper.KeeperException.NoNodeException; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.data.Stat; +import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting; + /** * ZooKeeper based implementation of * {@link SplitLogManagerCoordination} @@ -355,7 +357,7 @@ public class ZKSplitLogManagerCoordination extends ZooKeeperListener implements setDone(path, FAILURE); return; } - data = RecoverableZooKeeper.removeMetaData(data); + data = ZKMetadata.removeMetaData(data); SplitLogTask slt = SplitLogTask.parseFrom(data); if (slt.isUnassigned()) { LOG.debug("task not yet acquired " + path + " ver = " + version); @@ -478,7 +480,7 @@ public class ZKSplitLogManagerCoordination extends ZooKeeperListener implements int listSize = orphans.size(); for (int i = 0; i < listSize; i++) { String path = orphans.get(i); - String nodepath = ZKUtil.joinZNode(watcher.znodePaths.splitLogZNode, path); + String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path); if (ZKSplitLog.isRescanNode(watcher, nodepath)) { rescan_nodes++; LOG.debug("found orphan rescan node " + path); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java index e1962485759..ef87498d3a8 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java @@ -34,7 +34,6 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.SplitLogCounters; import org.apache.hadoop.hbase.SplitLogTask; -import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.regionserver.SplitLogWorker; @@ -43,12 +42,14 @@ import org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler; import org.apache.hadoop.hbase.util.CancelableProgressable; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.wal.AbstractFSWALProvider; -import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper; +import org.apache.hadoop.hbase.zookeeper.ZKMetadata; import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.util.StringUtils; +import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.data.Stat; @@ -419,7 +420,7 @@ public class ZkSplitLogWorkerCoordination extends ZooKeeperListener implements // don't call ZKSplitLog.getNodeName() because that will lead to // double encoding of the path name if (this.calculateAvailableSplitters(numTasks) > 0) { - grabTask(ZKUtil.joinZNode(watcher.znodePaths.splitLogZNode, paths.get(idx))); + grabTask(ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, paths.get(idx))); } else { LOG.debug("Current region server " + server.getServerName() + " has " + this.tasksInProgress.get() + " tasks in progress and can't take more."); @@ -524,7 +525,7 @@ public class ZkSplitLogWorkerCoordination extends ZooKeeperListener implements getDataSetWatchFailure(path); return; } - data = RecoverableZooKeeper.removeMetaData(data); + data = ZKMetadata.removeMetaData(data); getDataSetWatchSuccess(path, data); } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java index 25e1ec8c3c3..f154347410f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.monitoring.MonitoredTask; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -155,7 +156,7 @@ public class ActiveMasterManager extends ZooKeeperListener { */ boolean blockUntilBecomingActiveMaster( int checkInterval, MonitoredTask startupStatus) { - String backupZNode = ZKUtil.joinZNode( + String backupZNode = ZNodePaths.joinZNode( this.watcher.znodePaths.backupMasterAddressesZNode, this.sn.toString()); while (!(master.isAborted() || master.isStopped())) { startupStatus.setStatus("Trying to register in ZK as active master"); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index f18202e7fa2..91c5218c527 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -183,6 +183,7 @@ import org.apache.hadoop.hbase.zookeeper.RegionServerTracker; import org.apache.hadoop.hbase.zookeeper.SplitOrMergeTracker; import org.apache.hadoop.hbase.zookeeper.ZKClusterId; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.KeeperException; @@ -1980,7 +1981,7 @@ public class HMaster extends HRegionServer implements MasterServices { } private void startActiveMasterManager(int infoPort) throws KeeperException { - String backupZNode = ZKUtil.joinZNode( + String backupZNode = ZNodePaths.joinZNode( zooKeeper.znodePaths.backupMasterAddressesZNode, serverName.toString()); /* * Add a ZNode for ourselves in the backup master directory since we @@ -2511,7 +2512,7 @@ public class HMaster extends HRegionServer implements MasterServices { try { byte [] bytes; try { - bytes = ZKUtil.getData(this.zooKeeper, ZKUtil.joinZNode( + bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode( this.zooKeeper.znodePaths.backupMasterAddressesZNode, s)); } catch (InterruptedException e) { throw new InterruptedIOException(); @@ -3429,7 +3430,7 @@ public class HMaster extends HRegionServer implements MasterServices { String parentZnode = getZooKeeper().znodePaths.drainingZNode; for (ServerName server : servers) { try { - String node = ZKUtil.joinZNode(parentZnode, server.getServerName()); + String node = ZNodePaths.joinZNode(parentZnode, server.getServerName()); ZKUtil.createAndFailSilent(getZooKeeper(), node); } catch (KeeperException ke) { throw new HBaseIOException( @@ -3476,7 +3477,7 @@ public class HMaster extends HRegionServer implements MasterServices { final List encodedRegionNames) throws HBaseIOException { // Remove the server from decommissioned (draining) server list. String parentZnode = getZooKeeper().znodePaths.drainingZNode; - String node = ZKUtil.joinZNode(parentZnode, server.getServerName()); + String node = ZNodePaths.joinZNode(parentZnode, server.getServerName()); try { ZKUtil.deleteNodeFailSilent(getZooKeeper(), node); } catch (KeeperException ke) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java index 822ca6f6f37..97d3080c268 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.java @@ -38,6 +38,7 @@ import org.apache.hadoop.hbase.replication.ReplicationQueuesClient; import org.apache.hadoop.hbase.replication.ReplicationQueuesClientArguments; import org.apache.hadoop.hbase.replication.ReplicationStateZKBase; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -139,8 +140,8 @@ public class ReplicationZKNodeCleaner { * @throws IOException */ public void removeQueue(final String replicator, final String queueId) throws IOException { - String queueZnodePath = ZKUtil.joinZNode(ZKUtil.joinZNode(this.queuesZNode, replicator), - queueId); + String queueZnodePath = + ZNodePaths.joinZNode(ZNodePaths.joinZNode(this.queuesZNode, replicator), queueId); try { ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId); if (!replicationPeers.getAllPeerIds().contains(queueInfo.getPeerId())) { @@ -159,7 +160,7 @@ public class ReplicationZKNodeCleaner { * @throws IOException */ public void removeHFileRefsQueue(final String hfileRefsQueueId) throws IOException { - String node = ZKUtil.joinZNode(this.hfileRefsZNode, hfileRefsQueueId); + String node = ZNodePaths.joinZNode(this.hfileRefsZNode, hfileRefsQueueId); try { if (!replicationPeers.getAllPeerIds().contains(hfileRefsQueueId)) { ZKUtil.deleteNodeRecursively(this.zookeeper, node); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java index 8d34fe42271..6985591214f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java @@ -28,6 +28,7 @@ import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.errorhandling.ForeignException; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -96,7 +97,7 @@ public class ZKProcedureCoordinator implements ProcedureCoordinatorRpcs { ZKUtil.createWithParents(zkProc.getWatcher(), acquire, data); // loop through all the children of the acquire phase and watch for them for (String node : nodeNames) { - String znode = ZKUtil.joinZNode(acquire, node); + String znode = ZNodePaths.joinZNode(acquire, node); LOG.debug("Watching for acquire node:" + znode); if (ZKUtil.watchAndCheckExists(zkProc.getWatcher(), znode)) { coordinator.memberAcquiredBarrier(procName, node); @@ -119,7 +120,7 @@ public class ZKProcedureCoordinator implements ProcedureCoordinatorRpcs { ZKUtil.createWithParents(zkProc.getWatcher(), reachedNode); // loop through all the children of the acquire phase and watch for them for (String node : nodeNames) { - String znode = ZKUtil.joinZNode(reachedNode, node); + String znode = ZNodePaths.joinZNode(reachedNode, node); if (ZKUtil.watchAndCheckExists(zkProc.getWatcher(), znode)) { byte[] dataFromMember = ZKUtil.getData(zkProc.getWatcher(), znode); // ProtobufUtil.isPBMagicPrefix will check null diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java index f8db277eee7..36f4f44cd3b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.errorhandling.ForeignException; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -136,7 +137,7 @@ public class ZKProcedureMemberRpcs implements ProcedureMemberRpcs { // this is the list of the currently aborted procedues for (String node : ZKUtil.listChildrenAndWatchForNewChildren(zkController.getWatcher(), zkController.getAbortZnode())) { - String abortNode = ZKUtil.joinZNode(zkController.getAbortZnode(), node); + String abortNode = ZNodePaths.joinZNode(zkController.getAbortZnode(), node); abort(abortNode); } } catch (KeeperException e) { @@ -166,7 +167,7 @@ public class ZKProcedureMemberRpcs implements ProcedureMemberRpcs { } for (String procName : runningProcedures) { // then read in the procedure information - String path = ZKUtil.joinZNode(zkController.getAcquiredBarrier(), procName); + String path = ZNodePaths.joinZNode(zkController.getAcquiredBarrier(), procName); startNewSubprocedure(path); } } @@ -238,7 +239,7 @@ public class ZKProcedureMemberRpcs implements ProcedureMemberRpcs { try { LOG.debug("Member: '" + memberName + "' joining acquired barrier for procedure (" + procName + ") in zk"); - String acquiredZNode = ZKUtil.joinZNode(ZKProcedureUtil.getAcquireBarrierNode( + String acquiredZNode = ZNodePaths.joinZNode(ZKProcedureUtil.getAcquireBarrierNode( zkController, procName), memberName); ZKUtil.createAndFailSilent(zkController.getWatcher(), acquiredZNode); @@ -262,7 +263,8 @@ public class ZKProcedureMemberRpcs implements ProcedureMemberRpcs { String procName = sub.getName(); LOG.debug("Marking procedure '" + procName + "' completed for member '" + memberName + "' in zk"); - String joinPath = ZKUtil.joinZNode(zkController.getReachedBarrierNode(procName), memberName); + String joinPath = + ZNodePaths.joinZNode(zkController.getReachedBarrierNode(procName), memberName); // ProtobufUtil.prependPBMagic does not take care of null if (data == null) { data = new byte[0]; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java index a19ecb22544..24693cd2bd1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java @@ -25,6 +25,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -78,10 +79,10 @@ public abstract class ZKProcedureUtil // make sure we are listening for events watcher.registerListener(this); // setup paths for the zknodes used in procedures - this.baseZNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, procDescription); - acquiredZnode = ZKUtil.joinZNode(baseZNode, ACQUIRED_BARRIER_ZNODE_DEFAULT); - reachedZnode = ZKUtil.joinZNode(baseZNode, REACHED_BARRIER_ZNODE_DEFAULT); - abortZnode = ZKUtil.joinZNode(baseZNode, ABORT_ZNODE_DEFAULT); + this.baseZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, procDescription); + acquiredZnode = ZNodePaths.joinZNode(baseZNode, ACQUIRED_BARRIER_ZNODE_DEFAULT); + reachedZnode = ZNodePaths.joinZNode(baseZNode, REACHED_BARRIER_ZNODE_DEFAULT); + abortZnode = ZNodePaths.joinZNode(baseZNode, ABORT_ZNODE_DEFAULT); // first make sure all the ZK nodes exist // make sure all the parents exist (sometimes not the case in tests) @@ -130,7 +131,7 @@ public abstract class ZKProcedureUtil */ public static String getAcquireBarrierNode(ZKProcedureUtil controller, String opInstanceName) { - return ZKUtil.joinZNode(controller.acquiredZnode, opInstanceName); + return ZNodePaths.joinZNode(controller.acquiredZnode, opInstanceName); } /** @@ -142,7 +143,7 @@ public abstract class ZKProcedureUtil */ public static String getReachedBarrierNode(ZKProcedureUtil controller, String opInstanceName) { - return ZKUtil.joinZNode(controller.reachedZnode, opInstanceName); + return ZNodePaths.joinZNode(controller.reachedZnode, opInstanceName); } /** @@ -153,7 +154,7 @@ public abstract class ZKProcedureUtil * @return full znode path to the abort znode */ public static String getAbortNode(ZKProcedureUtil controller, String opInstanceName) { - return ZKUtil.joinZNode(controller.abortZnode, opInstanceName); + return ZNodePaths.joinZNode(controller.abortZnode, opInstanceName); } public ZooKeeperWatcher getWatcher() { @@ -212,7 +213,7 @@ public abstract class ZKProcedureUtil private boolean isMemberNode(final String path, final String statePath) { int count = 0; for (int i = statePath.length(); i < path.length(); ++i) { - count += (path.charAt(i) == ZKUtil.ZNODE_PATH_SEPARATOR) ? 1 : 0; + count += (path.charAt(i) == ZNodePaths.ZNODE_PATH_SEPARATOR) ? 1 : 0; } return count == 2; } @@ -261,7 +262,7 @@ public abstract class ZKProcedureUtil if (children == null) return; for (String child : children) { LOG.debug(prefix + child); - String node = ZKUtil.joinZNode(root.equals("/") ? "" : root, child); + String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child); logZKTree(node, prefix + "---"); } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 48189bee30d..6ad595f36a0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -162,6 +162,7 @@ import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKClusterId; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperNodeTracker; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.ipc.RemoteException; @@ -3523,7 +3524,7 @@ public class HRegionServer extends HasThread implements } private String getMyEphemeralNodePath() { - return ZKUtil.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString()); + return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString()); } private boolean isHealthCheckerConfigured() { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java index 09a1771eff0..447ba51b115 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hbase.DaemonThreadFactory; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -67,7 +68,7 @@ public class ZKPermissionWatcher extends ZooKeeperListener implements Closeable super(watcher); this.authManager = authManager; String aclZnodeParent = conf.get("zookeeper.znode.acl.parent", ACL_NODE); - this.aclZNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, aclZnodeParent); + this.aclZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, aclZnodeParent); executor = Executors.newSingleThreadExecutor( new DaemonThreadFactory("zk-permission-watcher")); } @@ -260,8 +261,8 @@ public class ZKPermissionWatcher extends ZooKeeperListener implements Closeable */ public void writeToZookeeper(byte[] entry, byte[] permsData) { String entryName = Bytes.toString(entry); - String zkNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); - zkNode = ZKUtil.joinZNode(zkNode, entryName); + String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); + zkNode = ZNodePaths.joinZNode(zkNode, entryName); try { ZKUtil.createWithParents(watcher, zkNode); @@ -278,8 +279,8 @@ public class ZKPermissionWatcher extends ZooKeeperListener implements Closeable * @param tableName */ public void deleteTableACLNode(final TableName tableName) { - String zkNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); - zkNode = ZKUtil.joinZNode(zkNode, tableName.getNameAsString()); + String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); + zkNode = ZNodePaths.joinZNode(zkNode, tableName.getNameAsString()); try { ZKUtil.deleteNode(watcher, zkNode); @@ -295,8 +296,8 @@ public class ZKPermissionWatcher extends ZooKeeperListener implements Closeable * Delete the acl notify node of namespace */ public void deleteNamespaceACLNode(final String namespace) { - String zkNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); - zkNode = ZKUtil.joinZNode(zkNode, AccessControlLists.NAMESPACE_PREFIX + namespace); + String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE); + zkNode = ZNodePaths.joinZNode(zkNode, AccessControlLists.NAMESPACE_PREFIX + namespace); try { ZKUtil.deleteNode(watcher, zkNode); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java index 718e8e0dc16..27ea5098188 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java @@ -34,7 +34,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.zookeeper.ZKClusterId; import org.apache.hadoop.hbase.zookeeper.ZKLeaderManager; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.io.Text; import org.apache.hadoop.security.token.SecretManager; @@ -301,7 +301,7 @@ public class AuthenticationTokenSecretManager setDaemon(true); setName("ZKSecretWatcher-leaderElector"); zkLeader = new ZKLeaderManager(watcher, - ZKUtil.joinZNode(zkWatcher.getRootKeyZNode(), "keymaster"), + ZNodePaths.joinZNode(zkWatcher.getRootKeyZNode(), "keymaster"), Bytes.toBytes(serverName), this); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java index 42dc3a96438..9f0da781b9b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java @@ -29,6 +29,7 @@ import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -52,8 +53,8 @@ public class ZKSecretWatcher extends ZooKeeperListener { super(watcher); this.secretManager = secretManager; String keyZNodeParent = conf.get("zookeeper.znode.tokenauth.parent", DEFAULT_ROOT_NODE); - this.baseKeyZNode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, keyZNodeParent); - this.keysParentZNode = ZKUtil.joinZNode(baseKeyZNode, DEFAULT_KEYS_PARENT); + this.baseKeyZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, keyZNodeParent); + this.keysParentZNode = ZNodePaths.joinZNode(baseKeyZNode, DEFAULT_KEYS_PARENT); } public void start() throws KeeperException { @@ -159,7 +160,7 @@ public class ZKSecretWatcher extends ZooKeeperListener { } private String getKeyNode(int keyId) { - return ZKUtil.joinZNode(keysParentZNode, Integer.toString(keyId)); + return ZNodePaths.joinZNode(keysParentZNode, Integer.toString(keyId)); } public void removeKeyFromZK(AuthenticationKey key) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java index 9b5a44a67d4..5a6a414fc2c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java @@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -53,8 +54,8 @@ public class ZKVisibilityLabelWatcher extends ZooKeeperListener { String labelZnodeParent = conf.get(VISIBILITY_LABEL_ZK_PATH, DEFAULT_VISIBILITY_LABEL_NODE); String userAuthsZnodeParent = conf.get(VISIBILITY_USER_AUTHS_ZK_PATH, DEFAULT_VISIBILITY_USER_AUTHS_NODE); - this.labelZnode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, labelZnodeParent); - this.userAuthsZnode = ZKUtil.joinZNode(watcher.znodePaths.baseZNode, userAuthsZnodeParent); + this.labelZnode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, labelZnodeParent); + this.userAuthsZnode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, userAuthsZnodeParent); } public void start() throws KeeperException { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 934a630a67a..bf4478d0a1c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -130,6 +130,7 @@ import org.apache.hadoop.hbase.wal.WALFactory; import org.apache.hadoop.hbase.wal.WALSplitter; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException; import org.apache.hadoop.ipc.RemoteException; @@ -703,7 +704,7 @@ public class HBaseFsck extends Configured implements Closeable { */ private boolean setMasterInMaintenanceMode() throws IOException { RetryCounter retryCounter = createZNodeRetryCounterFactory.create(); - hbckEphemeralNodePath = ZKUtil.joinZNode( + hbckEphemeralNodePath = ZNodePaths.joinZNode( zkw.znodePaths.masterMaintZNode, "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime())); do { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ZKDataMigrator.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ZKDataMigrator.java index 43c35987553..e07861e8dd9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ZKDataMigrator.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ZKDataMigrator.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; @@ -94,7 +95,7 @@ public class ZKDataMigrator { private static ZooKeeperProtos.DeprecatedTableState.State getTableState( final ZooKeeperWatcher zkw, final TableName tableName) throws KeeperException, InterruptedException { - String znode = ZKUtil.joinZNode(zkw.znodePaths.tableZNode, tableName.getNameAsString()); + String znode = ZNodePaths.joinZNode(zkw.znodePaths.tableZNode, tableName.getNameAsString()); byte [] data = ZKUtil.getData(zkw, znode); if (data == null || data.length <= 0) return null; try { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionServerTracker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionServerTracker.java index 47d504c03dc..c22876ae56a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionServerTracker.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/RegionServerTracker.java @@ -82,7 +82,7 @@ public class RegionServerTracker extends ZooKeeperListener { if (regionServers.get(sn) == null) { RegionServerInfo.Builder rsInfoBuilder = RegionServerInfo.newBuilder(); try { - String nodePath = ZKUtil.joinZNode(watcher.znodePaths.rsZNode, n); + String nodePath = ZNodePaths.joinZNode(watcher.znodePaths.rsZNode, n); byte[] data = ZKUtil.getData(watcher, nodePath); if (data != null && data.length > 0 && ProtobufUtil.isPBMagicPrefix(data)) { int magicLen = ProtobufUtil.lengthOfPBMagic(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.java index 8323ec46920..2c5ffba163b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/SplitOrMergeTracker.java @@ -52,9 +52,9 @@ public class SplitOrMergeTracker { } catch (KeeperException e) { throw new RuntimeException(e); } - splitZnode = ZKUtil.joinZNode(watcher.znodePaths.switchZNode, + splitZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode, conf.get("zookeeper.znode.switch.split", "split")); - mergeZnode = ZKUtil.joinZNode(watcher.znodePaths.switchZNode, + mergeZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode, conf.get("zookeeper.znode.switch.merge", "merge")); splitStateTracker = new SwitchStateTracker(watcher, splitZnode, abortable); mergeStateTracker = new SwitchStateTracker(watcher, mergeZnode, abortable); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java index 30e988f5af4..1376ba9101a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java @@ -45,7 +45,7 @@ public class ZKSplitLog { * @param filename log file name (only the basename) */ public static String getEncodedNodeName(ZooKeeperWatcher zkw, String filename) { - return ZKUtil.joinZNode(zkw.znodePaths.splitLogZNode, encode(filename)); + return ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, encode(filename)); } public static String getFileName(String node) { @@ -70,7 +70,7 @@ public class ZKSplitLog { } public static String getRescanNode(ZooKeeperWatcher zkw) { - return ZKUtil.joinZNode(zkw.znodePaths.splitLogZNode, "RESCAN"); + return ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, "RESCAN"); } /** diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/GenericTestUtils.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/GenericTestUtils.java index 08565e07af4..56be6575c92 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/GenericTestUtils.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/GenericTestUtils.java @@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.shaded.com.google.common.collect.Sets; /** * Test provides some very generic helpers which might be used across the tests + * *** for running UTs in hbase-server */ public abstract class GenericTestUtils { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaWithReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaWithReplicas.java index c49fbb4b126..6a4ada30b93 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaWithReplicas.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaWithReplicas.java @@ -56,6 +56,7 @@ import org.apache.hadoop.hbase.util.HBaseFsckRepair; import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil; import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.After; @@ -135,13 +136,13 @@ public class TestMetaWithReplicas { Configuration conf = TEST_UTIL.getConfiguration(); String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); - String primaryMetaZnode = ZKUtil.joinZNode(baseZNode, + String primaryMetaZnode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.metaserver", "meta-region-server")); // check that the data in the znode is parseable (this would also mean the znode exists) byte[] data = ZKUtil.getData(zkw, primaryMetaZnode); ProtobufUtil.toServerName(data); for (int i = 1; i < 3; i++) { - String secZnode = ZKUtil.joinZNode(baseZNode, + String secZnode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.metaserver", "meta-region-server") + "-" + i); String str = zkw.znodePaths.getZNodeForReplica(i); assertTrue(str.equals(secZnode)); @@ -171,7 +172,7 @@ public class TestMetaWithReplicas { String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); - String primaryMetaZnode = ZKUtil.joinZNode(baseZNode, + String primaryMetaZnode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.metaserver", "meta-region-server")); byte[] data = ZKUtil.getData(zkw, primaryMetaZnode); ServerName primary = ProtobufUtil.toServerName(data); @@ -402,7 +403,7 @@ public class TestMetaWithReplicas { ZooKeeperWatcher zkw = TEST_UTIL.getZooKeeperWatcher(); String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); - String primaryMetaZnode = ZKUtil.joinZNode(baseZNode, + String primaryMetaZnode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.metaserver", "meta-region-server")); // check that the data in the znode is parseable (this would also mean the znode exists) byte[] data = ZKUtil.getData(zkw, primaryMetaZnode); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java index 4c4a8edf84e..d8707c369b9 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentListener.java @@ -50,6 +50,7 @@ import org.apache.hadoop.hbase.util.JVMClusterUtil; import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker; import org.apache.hadoop.hbase.zookeeper.RegionServerTracker; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.AfterClass; import org.junit.Assert; @@ -322,7 +323,7 @@ public class TestAssignmentListener { "zkWatcher-NewServerDrainTest", abortable, true); String baseZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); - String drainingZNode = ZKUtil.joinZNode(baseZNode, + String drainingZNode = ZNodePaths.joinZNode(baseZNode, conf.get("zookeeper.znode.draining.rs", "draining")); HMaster master = Mockito.mock(HMaster.class); @@ -348,7 +349,7 @@ public class TestAssignmentListener { // Create draining znodes for the draining servers, which would have been // performed when the previous HMaster was running. for (ServerName sn : drainingServers) { - String znode = ZKUtil.joinZNode(drainingZNode, sn.getServerName()); + String znode = ZNodePaths.joinZNode(drainingZNode, sn.getServerName()); ZKUtil.createAndFailSilent(zooKeeper, znode); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.java index d50e4a38763..ebfec220982 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.java @@ -34,6 +34,7 @@ import org.apache.hadoop.hbase.master.assignment.RegionStates; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.zookeeper.KeeperException; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -95,7 +96,7 @@ public class TestMetaShutdownHandler { // Delete the ephemeral node of the meta-carrying region server. // This is trigger the expire of this region server on the master. String rsEphemeralNodePath = - ZKUtil.joinZNode(master.getZooKeeper().znodePaths.rsZNode, metaServerName.toString()); + ZNodePaths.joinZNode(master.getZooKeeper().znodePaths.rsZNode, metaServerName.toString()); ZKUtil.deleteNode(master.getZooKeeper(), rsEphemeralNodePath); // Wait for SSH to finish final ServerManager serverManager = master.getServerManager(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableStateManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableStateManager.java index 37def1ba40d..6cf259a6207 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableStateManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableStateManager.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.MasterTests; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.After; @@ -72,7 +73,7 @@ public class TestTableStateManager { private void setTableStateInZK(ZooKeeperWatcher watcher, final TableName tableName, final ZooKeeperProtos.DeprecatedTableState.State state) throws KeeperException, IOException { - String znode = ZKUtil.joinZNode(watcher.znodePaths.tableZNode, tableName.getNameAsString()); + String znode = ZNodePaths.joinZNode(watcher.znodePaths.tableZNode, tableName.getNameAsString()); if (ZKUtil.checkExists(watcher, znode) == -1) { ZKUtil.createAndFailSilent(watcher, znode); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.java index 5e212f83c3f..5c24c2c174f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.java @@ -42,7 +42,7 @@ import org.apache.hadoop.hbase.wal.AsyncFSWALProvider; import org.apache.hadoop.hbase.wal.FSHLogProvider; import org.apache.hadoop.hbase.wal.WALFactory; import org.apache.hadoop.hbase.wal.WALProvider; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.After; import org.junit.Before; @@ -124,7 +124,7 @@ public class TestCompactionInDeadRegionServer { HRegion region = (HRegion) rsToSuspend.getRegions(TABLE_NAME).get(0); ZooKeeperWatcher watcher = UTIL.getZooKeeperWatcher(); watcher.getRecoverableZooKeeper().delete( - ZKUtil.joinZNode(watcher.getZNodePaths().rsZNode, rsToSuspend.getServerName().toString()), + ZNodePaths.joinZNode(watcher.getZNodePaths().rsZNode, rsToSuspend.getServerName().toString()), -1); UTIL.waitFor(60000, 1000, new ExplainingPredicate() { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java index 3eec9d86c37..0bf9d0341f4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java @@ -52,6 +52,7 @@ import org.apache.hadoop.hbase.util.CancelableProgressable; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKSplitLog; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -429,7 +430,7 @@ public class TestSplitLogWorker { if (node.startsWith("RESCAN")) { String name = ZKSplitLog.getEncodedNodeName(zkw, node); String fn = ZKSplitLog.getFileName(name); - byte [] data = ZKUtil.getData(zkw, ZKUtil.joinZNode(zkw.znodePaths.splitLogZNode, fn)); + byte [] data = ZKUtil.getData(zkw, ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, fn)); slt = SplitLogTask.parseFrom(data); assertTrue(slt.toString(), slt.isDone(SRV)); } @@ -485,9 +486,9 @@ public class TestSplitLogWorker { RegionServerServices mockedRS = getRegionServer(RS); // create two RS nodes - String rsPath = ZKUtil.joinZNode(zkw.znodePaths.rsZNode, RS.getServerName()); + String rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS.getServerName()); zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); - rsPath = ZKUtil.joinZNode(zkw.znodePaths.rsZNode, RS2.getServerName()); + rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS2.getServerName()); zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); for (int i = 0; i < maxTasks; i++) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java index 457a5d062d1..3e499b2b306 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestMasterReplication.java @@ -75,6 +75,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.HFileTestUtil; import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.After; import org.junit.Before; @@ -203,10 +204,10 @@ public class TestMasterReplication { putAndWait(row, famName, htables[0], htables[0]); rollWALAndWait(utilities[0], table.getTableName(), row); ZooKeeperWatcher zkw = utilities[0].getZooKeeperWatcher(); - String queuesZnode = - ZKUtil.joinZNode(zkw.getZNodePaths().baseZNode, ZKUtil.joinZNode("replication", "rs")); + String queuesZnode = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, + ZNodePaths.joinZNode("replication", "rs")); List listChildrenNoWatch = - ZKUtil.listChildrenNoWatch(zkw, ZKUtil.joinZNode(queuesZnode, rsName.toString())); + ZKUtil.listChildrenNoWatch(zkw, ZNodePaths.joinZNode(queuesZnode, rsName.toString())); assertEquals(0, listChildrenNoWatch.size()); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java index 2fe09afacfd..cc09751a20a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateHBaseImpl.java @@ -30,6 +30,7 @@ import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.ReplicationTests; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.After; @@ -88,7 +89,7 @@ public class TestReplicationStateHBaseImpl { utility.startMiniCluster(); zkw = HBaseTestingUtility.getZooKeeperWatcher(utility); String replicationZNodeName = conf.get("zookeeper.znode.replication", "replication"); - replicationZNode = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, replicationZNodeName); + replicationZNode = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, replicationZNodeName); } @Before diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.java index 7d586ad184a..dde78680e32 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.java @@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKClusterId; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.zookeeper.KeeperException; import org.junit.After; @@ -69,7 +70,7 @@ public class TestReplicationStateZKImpl extends TestReplicationStateBasic { conf.setBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, true); zkw = HBaseTestingUtility.getZooKeeperWatcher(utility); String replicationZNodeName = conf.get("zookeeper.znode.replication", "replication"); - replicationZNode = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, replicationZNodeName); + replicationZNode = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, replicationZNodeName); KEY_ONE = initPeerClusterState("/hbase1"); KEY_TWO = initPeerClusterState("/hbase2"); } @@ -80,7 +81,7 @@ public class TestReplicationStateZKImpl extends TestReplicationStateBasic { Configuration testConf = new Configuration(conf); testConf.set(HConstants.ZOOKEEPER_ZNODE_PARENT, baseZKNode); ZooKeeperWatcher zkw1 = new ZooKeeperWatcher(testConf, "test1", null); - String fakeRs = ZKUtil.joinZNode(zkw1.znodePaths.rsZNode, "hostname1.example.org:1234"); + String fakeRs = ZNodePaths.joinZNode(zkw1.znodePaths.rsZNode, "hostname1.example.org:1234"); ZKUtil.createWithParents(zkw1, fakeRs); ZKClusterId.setClusterId(zkw1, new ClusterId()); return ZKConfig.getZooKeeperClusterKey(testConf); @@ -126,13 +127,13 @@ public class TestReplicationStateZKImpl extends TestReplicationStateBasic { @Test public void testIsPeerPath_PathToChildOfPeerNode() { - String peerChild = ZKUtil.joinZNode(ZKUtil.joinZNode(rqZK.peersZNode, "1"), "child"); + String peerChild = ZNodePaths.joinZNode(ZNodePaths.joinZNode(rqZK.peersZNode, "1"), "child"); assertFalse(rqZK.isPeerPath(peerChild)); } @Test public void testIsPeerPath_ActualPeerPath() { - String peerPath = ZKUtil.joinZNode(rqZK.peersZNode, "1"); + String peerPath = ZNodePaths.joinZNode(rqZK.peersZNode, "1"); assertTrue(rqZK.isPeerPath(peerPath)); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.java index 1e6e153eeb4..f6e7b39bb48 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.java @@ -43,6 +43,7 @@ import org.apache.hadoop.hbase.testclassification.ReplicationTests; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKClusterId; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.AfterClass; import org.junit.Before; @@ -88,7 +89,7 @@ public class TestReplicationTrackerZKImpl { @Before public void setUp() throws Exception { zkw = HBaseTestingUtility.getZooKeeperWatcher(utility); - String fakeRs1 = ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"); + String fakeRs1 = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"); try { ZKClusterId.setClusterId(zkw, new ClusterId()); rp = ReplicationFactory.getReplicationPeers(zkw, conf, zkw); @@ -117,31 +118,34 @@ public class TestReplicationTrackerZKImpl { // 1 region server ZKUtil.createWithParents(zkw, - ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234")); + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234")); assertEquals(1, rt.getListOfRegionServers().size()); // 2 region servers ZKUtil.createWithParents(zkw, - ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); assertEquals(2, rt.getListOfRegionServers().size()); // 1 region server - ZKUtil.deleteNode(zkw, ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); + ZKUtil.deleteNode(zkw, + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); assertEquals(1, rt.getListOfRegionServers().size()); // 0 region server - ZKUtil.deleteNode(zkw, ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234")); + ZKUtil.deleteNode(zkw, + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234")); assertEquals(0, rt.getListOfRegionServers().size()); } @Test(timeout = 30000) public void testRegionServerRemovedEvent() throws Exception { ZKUtil.createAndWatch(zkw, - ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"), + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"), HConstants.EMPTY_BYTE_ARRAY); rt.registerListener(new DummyReplicationListener()); // delete one - ZKUtil.deleteNode(zkw, ZKUtil.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); + ZKUtil.deleteNode(zkw, + ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234")); // wait for event while (rsRemovedCount.get() < 1) { Thread.sleep(5); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.java index 8451d694f3e..dd1e19a8060 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.java @@ -438,8 +438,8 @@ public abstract class TestReplicationSourceManager { public void testPeerRemovalCleanup() throws Exception{ String replicationSourceImplName = conf.get("replication.replicationsource.implementation"); final String peerId = "FakePeer"; - final ReplicationPeerConfig peerConfig = - new ReplicationPeerConfig().setClusterKey("localhost:1:/hbase"); + final ReplicationPeerConfig peerConfig = new ReplicationPeerConfig() + .setClusterKey("localhost:" + utility.getZkCluster().getClientPort() + ":/hbase"); try { DummyServer server = new DummyServer(); final ReplicationQueues rq = @@ -473,8 +473,8 @@ public abstract class TestReplicationSourceManager { @Test public void testRemovePeerMetricsCleanup() throws Exception { final String peerId = "DummyPeer"; - final ReplicationPeerConfig peerConfig = - new ReplicationPeerConfig().setClusterKey("localhost:1:/hbase"); + final ReplicationPeerConfig peerConfig = new ReplicationPeerConfig() + .setClusterKey("localhost:" + utility.getZkCluster().getClientPort() + ":/hbase"); try { addPeerAndWait(peerId, peerConfig, true); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestZKSecretWatcherRefreshKeys.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestZKSecretWatcherRefreshKeys.java index b2396819c85..fcadc9dc9d7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestZKSecretWatcherRefreshKeys.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestZKSecretWatcherRefreshKeys.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.testclassification.SecurityTests; import org.apache.hadoop.hbase.testclassification.SmallTests; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.hbase.zookeeper.ZKUtil; +import org.apache.hadoop.hbase.zookeeper.ZNodePaths; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.AfterClass; import org.junit.Assert; @@ -87,7 +88,7 @@ public class TestZKSecretWatcherRefreshKeys { AuthenticationKey ak = new AuthenticationKey(key, System.currentTimeMillis() + 600 * 1000, null); ZKUtil.createWithParents(zk, - ZKUtil.joinZNode(watcher.getKeysParentZNode(), key.toString()), + ZNodePaths.joinZNode(watcher.getKeysParentZNode(), key.toString()), Writables.getBytes(ak)); } Assert.assertNull(keyManager.getCurrentKey()); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMulti.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMulti.java index b4ac59c7465..7971417ca43 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMulti.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZKMulti.java @@ -88,7 +88,7 @@ public class TestZKMulti { ZKUtil.multiOrSequential(zkw, new LinkedList<>(), false); // single create - String path = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testSimpleMulti"); + String path = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSimpleMulti"); LinkedList singleCreate = new LinkedList<>(); singleCreate.add(ZKUtilOp.createAndFailSilent(path, new byte[0])); ZKUtil.multiOrSequential(zkw, singleCreate, false); @@ -110,12 +110,12 @@ public class TestZKMulti { @Test (timeout=60000) public void testComplexMulti() throws Exception { - String path1 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti1"); - String path2 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti2"); - String path3 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti3"); - String path4 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti4"); - String path5 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti5"); - String path6 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti6"); + String path1 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti1"); + String path2 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti2"); + String path3 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti3"); + String path4 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti4"); + String path5 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti5"); + String path6 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti6"); // create 4 nodes that we'll setData on or delete later LinkedList create4Nodes = new LinkedList<>(); create4Nodes.add(ZKUtilOp.createAndFailSilent(path1, Bytes.toBytes(path1))); @@ -154,7 +154,7 @@ public class TestZKMulti { public void testSingleFailure() throws Exception { // try to delete a node that doesn't exist boolean caughtNoNode = false; - String path = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureZ"); + String path = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureZ"); LinkedList ops = new LinkedList<>(); ops.add(ZKUtilOp.deleteNodeFailSilent(path)); try { @@ -191,9 +191,9 @@ public class TestZKMulti { @Test (timeout=60000) public void testSingleFailureInMulti() throws Exception { // try a multi where all but one operation succeeds - String pathA = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiA"); - String pathB = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiB"); - String pathC = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiC"); + String pathA = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiA"); + String pathB = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiB"); + String pathC = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiC"); LinkedList ops = new LinkedList<>(); ops.add(ZKUtilOp.createAndFailSilent(pathA, Bytes.toBytes(pathA))); ops.add(ZKUtilOp.createAndFailSilent(pathB, Bytes.toBytes(pathB))); @@ -213,17 +213,17 @@ public class TestZKMulti { @Test (timeout=60000) public void testMultiFailure() throws Exception { - String pathX = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureX"); - String pathY = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureY"); - String pathZ = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureZ"); + String pathX = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureX"); + String pathY = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureY"); + String pathZ = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureZ"); // create X that we will use to fail create later LinkedList ops = new LinkedList<>(); ops.add(ZKUtilOp.createAndFailSilent(pathX, Bytes.toBytes(pathX))); ZKUtil.multiOrSequential(zkw, ops, false); // fail one of each create ,setData, delete - String pathV = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureV"); - String pathW = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureW"); + String pathV = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureV"); + String pathW = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureW"); ops = new LinkedList<>(); ops.add(ZKUtilOp.createAndFailSilent(pathX, Bytes.toBytes(pathX))); // fail -- already exists ops.add(ZKUtilOp.setData(pathY, Bytes.toBytes(pathY))); // fail -- doesn't exist @@ -267,10 +267,10 @@ public class TestZKMulti { @Test (timeout=60000) public void testRunSequentialOnMultiFailure() throws Exception { - String path1 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "runSequential1"); - String path2 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "runSequential2"); - String path3 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "runSequential3"); - String path4 = ZKUtil.joinZNode(zkw.znodePaths.baseZNode, "runSequential4"); + String path1 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential1"); + String path2 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential2"); + String path3 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential3"); + String path4 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential4"); // create some nodes that we will use later LinkedList ops = new LinkedList<>(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.java index 87e2309db9d..951c6ba47d0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.java @@ -100,7 +100,7 @@ public class TestZooKeeperNodeTracker { ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode); final String node = - ZKUtil.joinZNode(zk.znodePaths.baseZNode, new Long(rand.nextLong()).toString()); + ZNodePaths.joinZNode(zk.znodePaths.baseZNode, new Long(rand.nextLong()).toString()); final byte [] dataOne = Bytes.toBytes("dataOne"); final byte [] dataTwo = Bytes.toBytes("dataTwo");