HBASE-18283 Provide a construct method which accept a thread pool for AsyncAdmin
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/af36bfb2 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/af36bfb2 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/af36bfb2 Branch: refs/heads/branch-2 Commit: af36bfb2f70bdfb131fe380e8f748e28d951bdbb Parents: 9b9fd70 Author: Guanghao Zhang <[email protected]> Authored: Tue Jul 4 09:51:41 2017 +0800 Committer: Guanghao Zhang <[email protected]> Committed: Tue Jul 4 10:18:49 2017 +0800 ---------------------------------------------------------------------- .../apache/hadoop/hbase/client/AsyncAdmin.java | 67 +- .../hadoop/hbase/client/AsyncConnection.java | 14 +- .../hbase/client/AsyncConnectionImpl.java | 7 +- .../hadoop/hbase/client/AsyncHBaseAdmin.java | 2085 +--------------- .../hadoop/hbase/client/RawAsyncHBaseAdmin.java | 2278 ++++++++++++++++++ .../hbase/shaded/protobuf/RequestConverter.java | 21 +- .../hadoop/hbase/client/TestAsyncAdminBase.java | 80 +- .../hbase/client/TestAsyncBalancerAdminApi.java | 3 + .../client/TestAsyncNamespaceAdminApi.java | 3 + .../client/TestAsyncProcedureAdminApi.java | 4 +- .../hbase/client/TestAsyncQuotaAdminApi.java | 37 +- .../hbase/client/TestAsyncRegionAdminApi.java | 737 +++--- .../client/TestAsyncReplicationAdminApi.java | 30 +- .../hbase/client/TestAsyncSnapshotAdminApi.java | 24 +- .../hbase/client/TestAsyncTableAdminApi.java | 818 +++---- 15 files changed, 3288 insertions(+), 2920 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/af36bfb2/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java index 3b022f4..ff35d46 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java @@ -47,11 +47,6 @@ import org.apache.hadoop.hbase.util.Pair; public interface AsyncAdmin { /** - * @return Async Connection used by this object. - */ - AsyncConnectionImpl getConnection(); - - /** * @param tableName Table to check. * @return True if table exists already. The return value will be wrapped by a * {@link CompletableFuture}. @@ -105,7 +100,9 @@ public interface AsyncAdmin { * Creates a new table. * @param desc table descriptor for table */ - CompletableFuture<Void> createTable(TableDescriptor desc); + default CompletableFuture<Void> createTable(TableDescriptor desc) { + return createTable(desc, Optional.empty()); + } /** * Creates a new table with the specified number of regions. The start key specified will become @@ -128,7 +125,7 @@ public interface AsyncAdmin { * @param desc table descriptor for table * @param splitKeys array of split keys for the initial regions of the table */ - CompletableFuture<Void> createTable(TableDescriptor desc, byte[][] splitKeys); + CompletableFuture<Void> createTable(TableDescriptor desc, Optional<byte[][]> splitKeys); /** * Deletes a table. @@ -188,6 +185,13 @@ public interface AsyncAdmin { /** * @param tableName name of table to check + * @return true if table is on-line. The return value will be wrapped by a + * {@link CompletableFuture}. + */ + CompletableFuture<Boolean> isTableEnabled(TableName tableName); + + /** + * @param tableName name of table to check * @return true if table is off-line. The return value will be wrapped by a * {@link CompletableFuture}. */ @@ -198,7 +202,9 @@ public interface AsyncAdmin { * @return true if all regions of the table are available. The return value will be wrapped by a * {@link CompletableFuture}. */ - CompletableFuture<Boolean> isTableAvailable(TableName tableName); + default CompletableFuture<Boolean> isTableAvailable(TableName tableName) { + return isTableAvailable(tableName, null); + } /** * Use this api to check if the table has been created with the specified number of splitkeys @@ -275,13 +281,6 @@ public interface AsyncAdmin { CompletableFuture<List<NamespaceDescriptor>> listNamespaceDescriptors(); /** - * @param tableName name of table to check - * @return true if table is on-line. The return value will be wrapped by a - * {@link CompletableFuture}. - */ - CompletableFuture<Boolean> isTableEnabled(TableName tableName); - - /** * Turn the load balancer on or off. * @param on * @return Previous balancer value wrapped by a {@link CompletableFuture}. @@ -330,7 +329,7 @@ public interface AsyncAdmin { /** * Get all the online regions on a region server. */ - CompletableFuture<List<HRegionInfo>> getOnlineRegions(ServerName sn); + CompletableFuture<List<HRegionInfo>> getOnlineRegions(ServerName serverName); /** * Flush a table. @@ -422,15 +421,15 @@ public interface AsyncAdmin { /** * Compact all regions on the region server. - * @param sn the region server name + * @param serverName the region server name */ - CompletableFuture<Void> compactRegionServer(ServerName sn); + CompletableFuture<Void> compactRegionServer(ServerName serverName); /** * Compact all regions on the region server. - * @param sn the region server name + * @param serverName the region server name */ - CompletableFuture<Void> majorCompactRegionServer(ServerName sn); + CompletableFuture<Void> majorCompactRegionServer(ServerName serverName); /** * Merge two regions. @@ -563,18 +562,18 @@ public interface AsyncAdmin { /** * Append the replicable table-cf config of the specified peer - * @param id a short that identifies the cluster + * @param peerId a short that identifies the cluster * @param tableCfs A map from tableName to column family names */ - CompletableFuture<Void> appendReplicationPeerTableCFs(String id, + CompletableFuture<Void> appendReplicationPeerTableCFs(String peerId, Map<TableName, ? extends Collection<String>> tableCfs); /** * Remove some table-cfs from config of the specified peer - * @param id a short name that identifies the cluster + * @param peerId a short name that identifies the cluster * @param tableCfs A map from tableName to column family names */ - CompletableFuture<Void> removeReplicationPeerTableCFs(String id, + CompletableFuture<Void> removeReplicationPeerTableCFs(String peerId, Map<TableName, ? extends Collection<String>> tableCfs); /** @@ -613,7 +612,9 @@ public interface AsyncAdmin { * @param snapshotName name of the snapshot to be created * @param tableName name of the table for which snapshot is created */ - CompletableFuture<Void> snapshot(String snapshotName, TableName tableName); + default CompletableFuture<Void> snapshot(String snapshotName, TableName tableName) { + return snapshot(snapshotName, tableName, SnapshotType.FLUSH); + } /** * Create typed snapshot of the table. Snapshots are considered unique based on <b>the name of the @@ -627,8 +628,10 @@ public interface AsyncAdmin { * @param tableName name of the table to snapshot * @param type type of snapshot to take */ - CompletableFuture<Void> snapshot(String snapshotName, TableName tableName, - SnapshotType type); + default CompletableFuture<Void> snapshot(String snapshotName, TableName tableName, + SnapshotType type) { + return snapshot(new SnapshotDescription(snapshotName, tableName, type)); + } /** * Take a snapshot and wait for the server to complete that snapshot asynchronously. Only a single @@ -695,14 +698,16 @@ public interface AsyncAdmin { * @return a list of snapshot descriptors for completed snapshots wrapped by a * {@link CompletableFuture} */ - CompletableFuture<List<SnapshotDescription>> listSnapshots(); + default CompletableFuture<List<SnapshotDescription>> listSnapshots() { + return listSnapshots(Optional.empty()); + } /** * List all the completed snapshots matching the given pattern. * @param pattern The compiled regular expression to match against * @return - returns a List of SnapshotDescription wrapped by a {@link CompletableFuture} */ - CompletableFuture<List<SnapshotDescription>> listSnapshots(Pattern pattern); + CompletableFuture<List<SnapshotDescription>> listSnapshots(Optional<Pattern> pattern); /** * List all the completed snapshots matching the given table name regular expression and snapshot @@ -725,7 +730,9 @@ public interface AsyncAdmin { * Delete existing snapshots whose names match the pattern passed. * @param pattern pattern for names of the snapshot to match */ - CompletableFuture<Void> deleteSnapshots(Pattern pattern); + default CompletableFuture<Void> deleteSnapshots(Pattern pattern) { + return deleteTableSnapshots(null, pattern); + } /** * Delete all existing snapshots matching the given table name regular expression and snapshot http://git-wip-us.apache.org/repos/asf/hbase/blob/af36bfb2/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnection.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnection.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnection.java index 65005fa..22ed064 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnection.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnection.java @@ -96,11 +96,17 @@ public interface AsyncConnection extends Closeable { AsyncTableBuilder<AsyncTable> getTableBuilder(TableName tableName, ExecutorService pool); /** - * Retrieve an AsyncAdmin implementation to administer an HBase cluster. The returned AsyncAdmin - * is not guaranteed to be thread-safe. A new instance should be created for each using thread. - * This is a lightweight operation. Pooling or caching of the returned AsyncAdmin is not - * recommended. + * Retrieve an AsyncAdmin implementation to administer an HBase cluster. The returned + * {@code CompletableFuture} will be finished directly in the rpc framework's callback thread, so + * typically you should not do any time consuming work inside these methods. * @return an AsyncAdmin instance for cluster administration */ AsyncAdmin getAdmin(); + + /** + * Retrieve an AsyncAdmin implementation to administer an HBase cluster. + * @param pool the thread pool to use for executing callback + * @return an AsyncAdmin instance for cluster administration + */ + AsyncAdmin getAdmin(ExecutorService pool); } http://git-wip-us.apache.org/repos/asf/hbase/blob/af36bfb2/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionImpl.java ---------------------------------------------------------------------- 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 776498a..c170bce 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 @@ -279,6 +279,11 @@ class AsyncConnectionImpl implements AsyncConnection { @Override public AsyncAdmin getAdmin() { - return new AsyncHBaseAdmin(this); + return new RawAsyncHBaseAdmin(this); + } + + @Override + public AsyncAdmin getAdmin(ExecutorService pool) { + return new AsyncHBaseAdmin(new RawAsyncHBaseAdmin(this), pool); } } \ No newline at end of file
