diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java index cc1ba871799..bfcc1870631 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTable.java @@ -60,6 +60,15 @@ public interface AsyncTable { */ Configuration getConfiguration(); + /** + * Gets the {@link TableDescriptor} for this table. + */ + CompletableFuture getDescriptor(); + + /** + * Gets the {@link AsyncTableRegionLocator} for this table. + */ + AsyncTableRegionLocator getRegionLocator(); /** * Get timeout of each rpc request in this Table instance. It will be overridden by a more * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout. diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java index 426b18496b2..2256a4c1a89 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncTableImpl.java @@ -62,6 +62,16 @@ class AsyncTableImpl implements AsyncTable { return rawTable.getConfiguration(); } + @Override + public CompletableFuture getDescriptor() { + return wrap(rawTable.getDescriptor()); + } + + @Override + public AsyncTableRegionLocator getRegionLocator() { + return rawTable.getRegionLocator(); + } + @Override public long getRpcTimeout(TimeUnit unit) { return rawTable.getRpcTimeout(unit); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java index 4ff064f7796..e357a8c37e1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java @@ -1180,6 +1180,7 @@ public class HTable implements Table { } } + @Override public RegionLocator getRegionLocator() { return this.locator; } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java index 6b876536382..b2ca3a90b8f 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncTableImpl.java @@ -130,6 +130,16 @@ class RawAsyncTableImpl implements AsyncTable { return conn.getConfiguration(); } + @Override + public CompletableFuture getDescriptor() { + return conn.getAdmin().getDescriptor(tableName); + } + + @Override + public AsyncTableRegionLocator getRegionLocator() { + return conn.getRegionLocator(tableName); + } + @FunctionalInterface private interface Converter { D convert(I info, S src) throws IOException; diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java index 69084247814..068f15dfa29 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java @@ -18,30 +18,28 @@ */ package org.apache.hadoop.hbase.client; +import com.google.protobuf.Descriptors; +import com.google.protobuf.Message; +import com.google.protobuf.Service; +import com.google.protobuf.ServiceException; import java.io.Closeable; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; - import org.apache.commons.lang3.NotImplementedException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CompareOperator; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.io.TimeRange; -import org.apache.yetus.audience.InterfaceAudience; - import org.apache.hadoop.hbase.client.coprocessor.Batch; import org.apache.hadoop.hbase.filter.CompareFilter; +import org.apache.hadoop.hbase.io.TimeRange; import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel; import org.apache.hadoop.hbase.util.Bytes; -import com.google.protobuf.Descriptors; -import com.google.protobuf.Message; -import com.google.protobuf.Service; -import com.google.protobuf.ServiceException; +import org.apache.yetus.audience.InterfaceAudience; /** * Used to communicate with a single HBase table. @@ -92,6 +90,11 @@ public interface Table extends Closeable { */ TableDescriptor getDescriptor() throws IOException; + /** + * Gets the {@link RegionLocator} for this table. + */ + RegionLocator getRegionLocator() throws IOException; + /** * Test for the existence of columns in the table, as specified by the Get. *

diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java index ef8dfc824e0..0ece796051a 100644 --- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java +++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java @@ -43,6 +43,7 @@ import org.apache.hadoop.hbase.client.Durability; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.RegionLocator; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Row; @@ -1022,4 +1023,9 @@ public class RemoteHTable implements Table { throw new UnsupportedOperationException("thenMutate not implemented"); } } + + @Override + public RegionLocator getRegionLocator() throws IOException { + throw new UnsupportedOperationException(); + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/RegionAsTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/RegionAsTable.java index 3c06d6e77c0..0cda421cdc4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/RegionAsTable.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/RegionAsTable.java @@ -17,24 +17,28 @@ */ package org.apache.hadoop.hbase.regionserver; +import com.google.protobuf.Descriptors.MethodDescriptor; +import com.google.protobuf.Message; +import com.google.protobuf.Service; +import com.google.protobuf.ServiceException; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; - import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CompareOperator; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.CompareOperator; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Durability; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.RegionLocator; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Row; @@ -48,11 +52,6 @@ import org.apache.hadoop.hbase.client.metrics.ScanMetrics; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel; -import com.google.protobuf.Descriptors.MethodDescriptor; -import com.google.protobuf.Message; -import com.google.protobuf.Service; -import com.google.protobuf.ServiceException; - /** * An implementation of {@link Table} that sits directly on a Region; it decorates the passed in * Region instance with the Table API. Some API is not implemented yet (throws @@ -412,9 +411,18 @@ public class RegionAsTable implements Table { @Override @Deprecated - public int getWriteRpcTimeout() { throw new UnsupportedOperationException(); } + public int getWriteRpcTimeout() { + throw new UnsupportedOperationException(); + } @Override @Deprecated - public int getReadRpcTimeout() { throw new UnsupportedOperationException(); } + public int getReadRpcTimeout() { + throw new UnsupportedOperationException(); + } + + @Override + public RegionLocator getRegionLocator() throws IOException { + throw new UnsupportedOperationException(); + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java index aa624702877..479b4f3eb64 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java @@ -540,7 +540,11 @@ public class TestWALEntrySinkFilter { @Override public void setOperationTimeout(int operationTimeout) { + } + @Override + public RegionLocator getRegionLocator() throws IOException { + return null; } }; } diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java index 5c826b972cb..6db9474b6ab 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftTable.java @@ -40,6 +40,7 @@ import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.RegionLocator; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Row; @@ -489,4 +490,8 @@ public class ThriftTable implements Table { throw new NotImplementedException("coprocessorService not supported in ThriftTable"); } + @Override + public RegionLocator getRegionLocator() throws IOException { + throw new NotImplementedException("getRegionLocator not supported in ThriftTable"); + } }