From e8dff9f55f591a4ccaa9324c3ed73b3f5a3fb31b Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Tue, 27 Nov 2018 15:10:54 +0800 Subject: [PATCH] HBASE-21515 Also initialize an AsyncClusterConnection in HRegionServer --- .../hbase/client/AsyncClusterConnection.java | 51 +++++++++++++++ .../hbase/client/AsyncConnectionImpl.java | 42 +++++++------ .../client/ClusterConnectionFactory.java | 63 +++++++++++++++++++ .../hbase/client/ConnectionFactory.java | 5 +- .../hadoop/hbase/util/ReflectionUtils.java | 22 ++++--- .../java/org/apache/hadoop/hbase/Server.java | 23 ++++++- .../apache/hadoop/hbase/master/HMaster.java | 3 + .../hbase/regionserver/HRegionServer.java | 42 ++++++++++--- .../regionserver/ReplicationSyncUp.java | 6 ++ .../hbase/MockRegionServerServices.java | 6 ++ .../client/TestAsyncNonMetaRegionLocator.java | 2 +- ...ncNonMetaRegionLocatorConcurrenyLimit.java | 2 +- .../client/TestAsyncRegionLocatorTimeout.java | 2 +- ...stAsyncSingleRequestRpcRetryingCaller.java | 4 +- .../client/TestAsyncTableNoncedRetry.java | 2 +- .../hbase/master/MockNoopMasterServices.java | 6 ++ .../hadoop/hbase/master/MockRegionServer.java | 6 ++ .../hbase/master/TestActiveMasterManager.java | 6 ++ .../master/cleaner/TestHFileCleaner.java | 6 ++ .../master/cleaner/TestHFileLinkCleaner.java | 6 ++ .../hbase/master/cleaner/TestLogsCleaner.java | 6 ++ .../cleaner/TestReplicationHFileCleaner.java | 6 ++ .../regionserver/TestHeapMemoryManager.java | 6 ++ .../regionserver/TestSplitLogWorker.java | 6 ++ .../hbase/regionserver/TestWALLockup.java | 6 ++ .../TestReplicationTrackerZKImpl.java | 6 ++ .../TestReplicationSourceManager.java | 6 ++ .../token/TestTokenAuthentication.java | 6 ++ .../apache/hadoop/hbase/util/MockServer.java | 7 ++- 29 files changed, 311 insertions(+), 49 deletions(-) create mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncClusterConnection.java create mode 100644 hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnectionFactory.java diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncClusterConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncClusterConnection.java new file mode 100644 index 0000000000..2d43065b8c --- /dev/null +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncClusterConnection.java @@ -0,0 +1,51 @@ +/** + * 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.ServerName; +import org.apache.hadoop.hbase.ipc.RpcClient; +import org.apache.yetus.audience.InterfaceAudience; + +import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; + +/** + * The asynchronous connection for internal usage. + */ +@InterfaceAudience.Private +public interface AsyncClusterConnection extends AsyncConnection { + + /** + * Get the admin service for the given region server. + *

+ * In some internal implementations, we need to get the raw protobuf interface and implement + * specific retry logic. For example, when sending procedures to region servers, or send + * replication request to remote region servers, etc. + */ + AdminService.Interface getAdminStub(ServerName serverName) throws IOException; + + /** + * Get the nonce generator for this connection. + */ + NonceGenerator getNonceGenerator(); + + /** + * Get the rpc client we used to communicate with other servers. + */ + RpcClient getRpcClient(); +} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java index a05764ee9b..3484dfa676 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java @@ -21,48 +21,48 @@ import static org.apache.hadoop.hbase.client.ConnectionUtils.NO_NONCE_GENERATOR; import static org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey; import static org.apache.hadoop.hbase.client.NonceGenerator.CLIENT_NONCES_ENABLED_KEY; -import org.apache.hadoop.hbase.AuthUtil; -import org.apache.hadoop.hbase.ChoreService; -import org.apache.hadoop.security.UserGroupInformation; -import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting; - -import org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer; - import java.io.IOException; +import java.net.SocketAddress; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; - import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.AuthUtil; +import org.apache.hadoop.hbase.ChoreService; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.yetus.audience.InterfaceAudience; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.hadoop.hbase.ipc.HBaseRpcController; import org.apache.hadoop.hbase.ipc.RpcClient; import org.apache.hadoop.hbase.ipc.RpcClientFactory; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; import org.apache.hadoop.hbase.security.User; +import org.apache.hadoop.hbase.util.CollectionUtils; +import org.apache.hadoop.hbase.util.Threads; +import org.apache.hadoop.security.UserGroupInformation; +import org.apache.yetus.audience.InterfaceAudience; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting; import org.apache.hbase.thirdparty.com.google.protobuf.RpcCallback; +import org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer; + import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService; import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsMasterRunningResponse; import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService; -import org.apache.hadoop.hbase.util.CollectionUtils; -import org.apache.hadoop.hbase.util.Threads; /** * The implementation of AsyncConnection. */ @InterfaceAudience.Private -class AsyncConnectionImpl implements AsyncConnection { +class AsyncConnectionImpl implements AsyncClusterConnection { private static final Logger LOG = LoggerFactory.getLogger(AsyncConnectionImpl.class); @@ -105,7 +105,7 @@ class AsyncConnectionImpl implements AsyncConnection { private ChoreService authService; public AsyncConnectionImpl(Configuration conf, AsyncRegistry registry, String clusterId, - User user) { + SocketAddress localAddress, User user) { this.conf = conf; this.user = user; if (user.isLoginFromKeytab()) { @@ -113,7 +113,7 @@ class AsyncConnectionImpl implements AsyncConnection { } this.connConf = new AsyncConnectionConfiguration(conf); this.registry = registry; - this.rpcClient = RpcClientFactory.createClient(conf, clusterId); + this.rpcClient = RpcClientFactory.createClient(conf, clusterId, localAddress, null); this.rpcControllerFactory = RpcControllerFactory.instantiate(conf); this.hostnameCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true); this.rpcTimeout = @@ -158,11 +158,16 @@ class AsyncConnectionImpl implements AsyncConnection { } // ditto - @VisibleForTesting + @Override public NonceGenerator getNonceGenerator() { return nonceGenerator; } + @Override + public RpcClient getRpcClient() { + return rpcClient; + } + private ClientService.Interface createRegionServerStub(ServerName serverName) throws IOException { return ClientService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout)); } @@ -181,7 +186,8 @@ class AsyncConnectionImpl implements AsyncConnection { return AdminService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout)); } - AdminService.Interface getAdminStub(ServerName serverName) throws IOException { + @Override + public AdminService.Interface getAdminStub(ServerName serverName) throws IOException { return CollectionUtils.computeIfAbsentEx(adminSubs, getStubKey(AdminService.Interface.class.getSimpleName(), serverName, hostnameCanChange), () -> createAdminServerStub(serverName)); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnectionFactory.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnectionFactory.java new file mode 100644 index 0000000000..68c0630bee --- /dev/null +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterConnectionFactory.java @@ -0,0 +1,63 @@ +/** + * 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.io.InterruptedIOException; +import java.net.SocketAddress; +import java.util.concurrent.ExecutionException; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.security.User; +import org.apache.yetus.audience.InterfaceAudience; + +import org.apache.hbase.thirdparty.com.google.common.base.Throwables; + +/** + * The factory for creating {@link AsyncClusterConnection}. + */ +@InterfaceAudience.Private +public final class ClusterConnectionFactory { + + private ClusterConnectionFactory() { + } + + /** + * Create a new {@link AsyncClusterConnection} instance. + *

+ * Unlike what we have done in {@link ConnectionFactory}, here we just return an + * {@link AsyncClusterConnection} instead of a {@link java.util.concurrent.CompletableFuture}, + * which means this method could block on fetching the cluster id. This is just used to simplify + * the implementation, as when starting new region servers, we do not need to be event-driven. Can + * change later if we want a {@link java.util.concurrent.CompletableFuture} here. + */ + public static AsyncClusterConnection createAsyncClusterConnection(Configuration conf, + SocketAddress localAddress, User user) throws IOException { + AsyncRegistry registry = AsyncRegistryFactory.getRegistry(conf); + String clusterId; + try { + clusterId = registry.getClusterId().get(); + } catch (InterruptedException e) { + throw (IOException) new InterruptedIOException().initCause(e); + } catch (ExecutionException e) { + Throwable cause = e.getCause(); + Throwables.propagateIfPossible(cause, IOException.class); + throw new IOException(cause); + } + return new AsyncConnectionImpl(conf, registry, clusterId, localAddress, user); + } +} diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionFactory.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionFactory.java index e24af7411d..2ba732af51 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionFactory.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionFactory.java @@ -295,9 +295,8 @@ public class ConnectionFactory { AsyncConnectionImpl.class, AsyncConnection.class); try { future.complete( - user.runAs((PrivilegedExceptionAction)() -> - ReflectionUtils.newInstance(clazz, conf, registry, clusterId, user)) - ); + user.runAs((PrivilegedExceptionAction) () -> ReflectionUtils + .newInstance(clazz, conf, registry, clusterId, null, user))); } catch (Exception e) { future.completeExceptionally(e); } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReflectionUtils.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReflectionUtils.java index a136846a92..268249da2e 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReflectionUtils.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ReflectionUtils.java @@ -83,15 +83,19 @@ public class ReflectionUtils { boolean match = true; for (int i = 0; i < ctorParamTypes.length && match; ++i) { - Class paramType = paramTypes[i].getClass(); - match = (!ctorParamTypes[i].isPrimitive()) ? ctorParamTypes[i].isAssignableFrom(paramType) : - ((int.class.equals(ctorParamTypes[i]) && Integer.class.equals(paramType)) || - (long.class.equals(ctorParamTypes[i]) && Long.class.equals(paramType)) || - (double.class.equals(ctorParamTypes[i]) && Double.class.equals(paramType)) || - (char.class.equals(ctorParamTypes[i]) && Character.class.equals(paramType)) || - (short.class.equals(ctorParamTypes[i]) && Short.class.equals(paramType)) || - (boolean.class.equals(ctorParamTypes[i]) && Boolean.class.equals(paramType)) || - (byte.class.equals(ctorParamTypes[i]) && Byte.class.equals(paramType))); + if (paramTypes[i] == null) { + match = !ctorParamTypes[i].isPrimitive(); + } else { + Class paramType = paramTypes[i].getClass(); + match = (!ctorParamTypes[i].isPrimitive()) ? ctorParamTypes[i].isAssignableFrom(paramType) + : ((int.class.equals(ctorParamTypes[i]) && Integer.class.equals(paramType)) || + (long.class.equals(ctorParamTypes[i]) && Long.class.equals(paramType)) || + (double.class.equals(ctorParamTypes[i]) && Double.class.equals(paramType)) || + (char.class.equals(ctorParamTypes[i]) && Character.class.equals(paramType)) || + (short.class.equals(ctorParamTypes[i]) && Short.class.equals(paramType)) || + (boolean.class.equals(ctorParamTypes[i]) && Boolean.class.equals(paramType)) || + (byte.class.equals(ctorParamTypes[i]) && Byte.class.equals(paramType))); + } } if (match) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java index 53a757a726..58bb0b76c5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/Server.java @@ -18,16 +18,17 @@ */ package org.apache.hadoop.hbase; +import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; +import org.apache.hadoop.hbase.client.AsyncConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZKWatcher; import org.apache.yetus.audience.InterfaceAudience; -import java.io.IOException; - /** * Defines a curated set of shared functions implemented by HBase servers (Masters * and RegionServers). For use internally only. Be judicious adding API. Changes cause ripples @@ -63,6 +64,24 @@ public interface Server extends Abortable, Stoppable { */ ClusterConnection getClusterConnection(); + /** + * Returns a reference to the servers' async connection. + *

+ * Important note: this method returns a reference to Connection which is managed by Server + * itself, so callers must NOT attempt to close connection obtained. + */ + default AsyncConnection getAsyncConnection() { + return getAsyncClusterConnection(); + } + + /** + * Returns a reference to the servers' async cluster connection. + *

+ * Important note: this method returns a reference to Connection which is managed by Server + * itself, so callers must NOT attempt to close connection obtained. + */ + AsyncClusterConnection getAsyncClusterConnection(); + /** * Returns instance of {@link org.apache.hadoop.hbase.zookeeper.MetaTableLocator} * running inside this server. This MetaServerLocator is started and stopped by server, clients 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 428030d4f9..b230888bc7 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 @@ -3043,6 +3043,9 @@ public class HMaster extends HRegionServer implements MasterServices { if (this.clusterConnection != null) { this.clusterConnection.close(); } + if (this.asyncClusterConnection != null) { + this.asyncClusterConnection.close(); + } } public void stopMaster() throws IOException { 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 b9d606d74b..d6716fb89f 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 @@ -76,7 +76,9 @@ import org.apache.hadoop.hbase.TableDescriptors; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.YouAreDeadException; import org.apache.hadoop.hbase.ZNodeClearer; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; +import org.apache.hadoop.hbase.client.ClusterConnectionFactory; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionUtils; import org.apache.hadoop.hbase.client.RegionInfo; @@ -104,7 +106,6 @@ import org.apache.hadoop.hbase.io.util.MemorySizeUtil; import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils; import org.apache.hadoop.hbase.ipc.NettyRpcClientConfigHelper; import org.apache.hadoop.hbase.ipc.RpcClient; -import org.apache.hadoop.hbase.ipc.RpcClientFactory; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.ipc.RpcServerInterface; @@ -261,6 +262,11 @@ public class HRegionServer extends HasThread implements */ protected ClusterConnection clusterConnection; + /** + * The asynchronous cluster connection to be shared by services. + */ + protected AsyncClusterConnection asyncClusterConnection; + /* * Long-living meta table locator, which is created when the server is started and stopped * when server shuts down. References to this locator shall be used to perform according @@ -833,9 +839,11 @@ public class HRegionServer extends HasThread implements /** * Setup our cluster connection if not already initialized. */ - protected synchronized void setupClusterConnection() throws IOException { + protected final synchronized void setupClusterConnection() throws IOException { if (clusterConnection == null) { clusterConnection = createClusterConnection(); + asyncClusterConnection = ClusterConnectionFactory.createAsyncClusterConnection(conf, + new InetSocketAddress(this.rpcServices.isa.getAddress(), 0), userProvider.getCurrent()); metaTableLocator = new MetaTableLocator(); } } @@ -850,8 +858,7 @@ public class HRegionServer extends HasThread implements initializeZooKeeper(); setupClusterConnection(); // Setup RPC client for master communication - this.rpcClient = RpcClientFactory.createClient(conf, clusterId, new InetSocketAddress( - this.rpcServices.isa.getAddress(), 0), clusterConnection.getConnectionMetrics()); + this.rpcClient = asyncClusterConnection.getRpcClient(); } catch (Throwable t) { // Call stop if error or process will stick around for ever since server // puts up non-daemon threads. @@ -1105,8 +1112,10 @@ public class HRegionServer extends HasThread implements } // so callers waiting for meta without timeout can stop - if (this.metaTableLocator != null) this.metaTableLocator.stop(); - if (this.clusterConnection != null && !clusterConnection.isClosed()) { + if (this.metaTableLocator != null) { + this.metaTableLocator.stop(); + } + if (this.clusterConnection != null) { try { this.clusterConnection.close(); } catch (IOException e) { @@ -1115,7 +1124,15 @@ public class HRegionServer extends HasThread implements LOG.warn("Attempt to close server's short circuit ClusterConnection failed.", e); } } - + if (this.asyncClusterConnection != null) { + try { + this.asyncClusterConnection.close(); + } catch (IOException e) { + // Although the {@link Closeable} interface throws an {@link + // IOException}, in reality, the implementation would never do that. + LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e); + } + } // Closing the compactSplit thread before closing meta regions if (!this.killed && containsMetaTableRegions()) { if (!abortRequested || this.fsOk) { @@ -3738,9 +3755,9 @@ public class HRegionServer extends HasThread implements } @Override - public EntityLock regionLock(List regionInfos, String description, - Abortable abort) throws IOException { - return new LockServiceClient(conf, lockStub, clusterConnection.getNonceGenerator()) + public EntityLock regionLock(List regionInfos, String description, Abortable abort) + throws IOException { + return new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator()) .regionLock(regionInfos, description, abort); } @@ -3844,4 +3861,9 @@ public class HRegionServer extends HasThread implements System.exit(1); } } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return asyncClusterConnection; + } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java index 62068fdd3e..56f02749d9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.util.FSUtils; @@ -186,5 +187,10 @@ public class ReplicationSyncUp extends Configured implements Tool { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java index c0a2a8cd54..f39f8fdcbc 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java @@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.RegionInfo; @@ -361,4 +362,9 @@ public class MockRegionServerServices implements RegionServerServices { public TableDescriptors getTableDescriptors() { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java index 38dc78d54d..4fb9716d74 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java @@ -78,7 +78,7 @@ public class TestAsyncNonMetaRegionLocator { TEST_UTIL.getAdmin().balancerSwitch(false, true); AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration()); CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry, - registry.getClusterId().get(), User.getCurrent()); + registry.getClusterId().get(), null, User.getCurrent()); LOCATOR = new AsyncNonMetaRegionLocator(CONN); SPLIT_KEYS = new byte[8][]; for (int i = 111; i < 999; i += 111) { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.java index c6624e7fcd..1f7d1b65eb 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.java @@ -124,7 +124,7 @@ public class TestAsyncNonMetaRegionLocatorConcurrenyLimit { TEST_UTIL.getAdmin().balancerSwitch(false, true); AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration()); CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry, - registry.getClusterId().get(), User.getCurrent()); + registry.getClusterId().get(), null, User.getCurrent()); LOCATOR = new AsyncNonMetaRegionLocator(CONN); SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i))) .toArray(byte[][]::new); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.java index 758aa303fc..0e28f965a6 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.java @@ -96,7 +96,7 @@ public class TestAsyncRegionLocatorTimeout { TEST_UTIL.waitTableAvailable(TABLE_NAME); AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration()); CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry, - registry.getClusterId().get(), User.getCurrent()); + registry.getClusterId().get(), null, User.getCurrent()); LOCATOR = CONN.getLocator(); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java index a6c2efb8af..4ce1de8ad7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java @@ -73,7 +73,7 @@ public class TestAsyncSingleRequestRpcRetryingCaller { TEST_UTIL.waitTableAvailable(TABLE_NAME); AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration()); CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry, - registry.getClusterId().get(), User.getCurrent()); + registry.getClusterId().get(), null, User.getCurrent()); } @AfterClass @@ -164,7 +164,7 @@ public class TestAsyncSingleRequestRpcRetryingCaller { } }; try (AsyncConnectionImpl mockedConn = new AsyncConnectionImpl(CONN.getConfiguration(), - CONN.registry, CONN.registry.getClusterId().get(), User.getCurrent()) { + CONN.registry, CONN.registry.getClusterId().get(), null, User.getCurrent()) { @Override AsyncRegionLocator getLocator() { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableNoncedRetry.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableNoncedRetry.java index 30085616f8..e1e55f50c7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableNoncedRetry.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableNoncedRetry.java @@ -85,7 +85,7 @@ public class TestAsyncTableNoncedRetry { TEST_UTIL.waitTableAvailable(TABLE_NAME); AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration()); ASYNC_CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry, - registry.getClusterId().get(), User.getCurrent()) { + registry.getClusterId().get(), null, User.getCurrent()) { @Override public NonceGenerator getNonceGenerator() { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java index ac20dbd0e2..9da2871eda 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockNoopMasterServices.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.CoordinatedStateManager; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableDescriptors; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; import org.apache.hadoop.hbase.client.Connection; @@ -479,4 +480,9 @@ public class MockNoopMasterServices implements MasterServices { public SyncReplicationReplayWALManager getSyncReplicationReplayWALManager() { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } \ No newline at end of file diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java index f4c2a33234..fd5f77970c 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java @@ -40,6 +40,7 @@ import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableDescriptors; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.ZooKeeperConnectionException; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.RegionInfo; @@ -714,4 +715,9 @@ class MockRegionServer implements AdminProtos.AdminService.BlockingInterface, public TableDescriptors getTableDescriptors() { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java index 5851dea3c4..5c5ba67bb8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.monitoring.MonitoredTask; @@ -355,5 +356,10 @@ public class TestActiveMasterManager { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java index 9da4df4aa2..c450df28da 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.testclassification.MasterTests; @@ -285,6 +286,11 @@ public class TestHFileCleaner { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } @Test diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java index c011ea8da7..dda8ffa3d5 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java @@ -34,6 +34,7 @@ import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.io.HFileLink; @@ -219,5 +220,10 @@ public class TestHFileLinkCleaner { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java index 882ea9d299..d5ed314db0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.Waiter; import org.apache.hadoop.hbase.ZooKeeperConnectionException; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.master.HMaster; @@ -416,6 +417,11 @@ public class TestLogsCleaner { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } static class FaultyZooKeeperWatcher extends ZKWatcher { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java index 24b930c588..e7ab702130 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java @@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.ZooKeeperConnectionException; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.master.HMaster; @@ -309,6 +310,11 @@ public class TestReplicationHFileCleaner { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } static class FaultyZooKeeperWatcher extends ZKWatcher { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java index 9f05a73f6f..20bf284303 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.Waiter; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.io.hfile.BlockCache; @@ -868,6 +869,11 @@ public class TestHeapMemoryManager { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } static class CustomHeapMemoryTuner implements HeapMemoryTuner { 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 0c38ee317c..90322865e2 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 @@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.SplitLogCounters; import org.apache.hadoop.hbase.SplitLogTask; import org.apache.hadoop.hbase.Waiter; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager; @@ -165,6 +166,11 @@ public class TestSplitLogWorker { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } private void waitForCounter(LongAdder ctr, long oldval, long newval, long timems) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestWALLockup.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestWALLockup.java index 84b8d6c1cc..0f1412dab0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestWALLockup.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestWALLockup.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.Durability; @@ -529,6 +530,11 @@ public class TestWALLockup { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } static class DummyWALActionsListener implements WALActionsListener { 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 241909583e..0a251544c4 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 @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.testclassification.MediumTests; @@ -269,5 +270,10 @@ public class TestReplicationTrackerZKImpl { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } } 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 0872ea75a9..9cddf2cef4 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 @@ -57,6 +57,7 @@ import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.Waiter; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.Connection; @@ -912,5 +913,10 @@ public abstract class TestReplicationSourceManager { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java index afde03790e..34fe9229bb 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java @@ -44,6 +44,7 @@ import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; @@ -369,6 +370,11 @@ public class TestTokenAuthentication { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } @Parameters(name = "{index}: rpcServerImpl={0}") diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/MockServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/MockServer.java index 551b940cf6..2282ac5822 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/MockServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/MockServer.java @@ -18,7 +18,6 @@ package org.apache.hadoop.hbase.util; import java.io.IOException; - import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hbase.ChoreService; @@ -27,6 +26,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.ZooKeeperConnectionException; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.log.HBaseMarkers; @@ -150,4 +150,9 @@ public class MockServer implements Server { public Connection createConnection(Configuration conf) throws IOException { return null; } + + @Override + public AsyncClusterConnection getAsyncClusterConnection() { + return null; + } } -- 2.17.1