HBASE-13698 Add RegionLocator methods to Thrift2
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/1bfe3879 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1bfe3879 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1bfe3879 Branch: refs/heads/hbase-12439 Commit: 1bfe3879566266a4e2fcd708934c94607163d295 Parents: 315f596 Author: Elliott Clark <[email protected]> Authored: Mon May 18 15:57:28 2015 -0700 Committer: Elliott Clark <[email protected]> Committed: Wed May 20 13:33:59 2015 -0700 ---------------------------------------------------------------------- hbase-thrift/pom.xml | 2 +- .../thrift2/ThriftHBaseServiceHandler.java | 57 + .../hadoop/hbase/thrift2/ThriftUtilities.java | 40 + .../hbase/thrift2/generated/THBaseService.java | 4248 +++++++++++++----- .../hbase/thrift2/generated/THRegionInfo.java | 1038 +++++ .../thrift2/generated/THRegionLocation.java | 498 ++ .../hbase/thrift2/generated/TMutation.java | 4 +- .../hbase/thrift2/generated/TServerName.java | 595 +++ .../apache/hadoop/hbase/thrift2/hbase.thrift | 44 + 9 files changed, 5470 insertions(+), 1056 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/1bfe3879/hbase-thrift/pom.xml ---------------------------------------------------------------------- diff --git a/hbase-thrift/pom.xml b/hbase-thrift/pom.xml index e845482..43c93d1 100644 --- a/hbase-thrift/pom.xml +++ b/hbase-thrift/pom.xml @@ -342,7 +342,7 @@ Profile for regenerating the thrift java classes. The generated files are to be committed to version control. Activate using: - mvn compile -Dcompile-thrift + mvn compile -Pcompile-thrift --> <profile> <id>compile-thrift</id> http://git-wip-us.apache.org/repos/asf/hbase/blob/1bfe3879/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java index 5031fb1..1343149 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java @@ -47,7 +47,9 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.classification.InterfaceAudience; +import org.apache.hadoop.hbase.client.RegionLocator; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.security.UserProvider; @@ -56,6 +58,7 @@ import org.apache.hadoop.hbase.thrift2.generated.TAppend; import org.apache.hadoop.hbase.thrift2.generated.TDelete; import org.apache.hadoop.hbase.thrift2.generated.TGet; import org.apache.hadoop.hbase.thrift2.generated.THBaseService; +import org.apache.hadoop.hbase.thrift2.generated.THRegionLocation; import org.apache.hadoop.hbase.thrift2.generated.TIOError; import org.apache.hadoop.hbase.thrift2.generated.TIllegalArgument; import org.apache.hadoop.hbase.thrift2.generated.TIncrement; @@ -141,6 +144,14 @@ public class ThriftHBaseServiceHandler implements THBaseService.Iface { } } + private RegionLocator getLocator(ByteBuffer tableName) { + try { + return connectionCache.getRegionLocator(byteBufferToByteArray(tableName)); + } catch (IOException ie) { + throw new RuntimeException(ie); + } + } + private void closeTable(Table table) throws TIOError { try { table.close(); @@ -385,6 +396,8 @@ public class ThriftHBaseServiceHandler implements THBaseService.Iface { return results; } + + @Override public void closeScanner(int scannerId) throws TIOError, TIllegalArgument, TException { LOG.debug("scannerClose: id=" + scannerId); @@ -412,4 +425,48 @@ public class ThriftHBaseServiceHandler implements THBaseService.Iface { } } + @Override + public List<THRegionLocation> getAllRegionLocations(ByteBuffer table) + throws TIOError, TException { + RegionLocator locator = null; + try { + locator = getLocator(table); + return ThriftUtilities.regionLocationsFromHBase(locator.getAllRegionLocations()); + + } catch (IOException e) { + throw getTIOError(e); + } finally { + if (locator != null) { + try { + locator.close(); + } catch (IOException e) { + LOG.warn("Couldn't close the locator.", e); + } + } + } + } + + @Override + public THRegionLocation getRegionLocation(ByteBuffer table, ByteBuffer row, boolean reload) + throws TIOError, TException { + + RegionLocator locator = null; + try { + locator = getLocator(table); + byte[] rowBytes = byteBufferToByteArray(row); + HRegionLocation hrl = locator.getRegionLocation(rowBytes, reload); + return ThriftUtilities.regionLocationFromHBase(hrl); + + } catch (IOException e) { + throw getTIOError(e); + } finally { + if (locator != null) { + try { + locator.close(); + } catch (IOException e) { + LOG.warn("Couldn't close the locator.", e); + } + } + } + } } http://git-wip-us.apache.org/repos/asf/hbase/blob/1bfe3879/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java ---------------------------------------------------------------------- diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java index d2da993..3251d13 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java @@ -26,6 +26,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.apache.hadoop.hbase.HRegionInfo; +import org.apache.hadoop.hbase.HRegionLocation; +import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; @@ -34,6 +37,7 @@ 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.HRegionLocator; import org.apache.hadoop.hbase.client.Increment; import org.apache.hadoop.hbase.client.OperationWithAttributes; import org.apache.hadoop.hbase.client.Put; @@ -51,12 +55,15 @@ import org.apache.hadoop.hbase.thrift2.generated.TDelete; import org.apache.hadoop.hbase.thrift2.generated.TDeleteType; import org.apache.hadoop.hbase.thrift2.generated.TDurability; import org.apache.hadoop.hbase.thrift2.generated.TGet; +import org.apache.hadoop.hbase.thrift2.generated.THRegionInfo; +import org.apache.hadoop.hbase.thrift2.generated.THRegionLocation; import org.apache.hadoop.hbase.thrift2.generated.TIncrement; import org.apache.hadoop.hbase.thrift2.generated.TMutation; import org.apache.hadoop.hbase.thrift2.generated.TPut; import org.apache.hadoop.hbase.thrift2.generated.TResult; import org.apache.hadoop.hbase.thrift2.generated.TRowMutations; import org.apache.hadoop.hbase.thrift2.generated.TScan; +import org.apache.hadoop.hbase.thrift2.generated.TServerName; import org.apache.hadoop.hbase.thrift2.generated.TTimeRange; import org.apache.hadoop.hbase.util.Bytes; @@ -467,6 +474,39 @@ public class ThriftUtilities { return out; } + public static THRegionLocation regionLocationFromHBase(HRegionLocation hrl) { + HRegionInfo hri = hrl.getRegionInfo(); + ServerName serverName = hrl.getServerName(); + + THRegionInfo thRegionInfo = new THRegionInfo(); + THRegionLocation thRegionLocation = new THRegionLocation(); + TServerName tServerName = new TServerName(); + + tServerName.setHostName(serverName.getHostname()); + tServerName.setPort(serverName.getPort()); + tServerName.setStartCode(serverName.getStartcode()); + + thRegionInfo.setTableName(hri.getTable().getName()); + thRegionInfo.setEndKey(hri.getEndKey()); + thRegionInfo.setStartKey(hri.getStartKey()); + thRegionInfo.setOffline(hri.isOffline()); + thRegionInfo.setSplit(hri.isSplit()); + thRegionInfo.setReplicaId(hri.getReplicaId()); + + thRegionLocation.setRegionInfo(thRegionInfo); + thRegionLocation.setServerName(tServerName); + + return thRegionLocation; + } + + public static List<THRegionLocation> regionLocationsFromHBase(List<HRegionLocation> locations) { + List<THRegionLocation> tlocations = new ArrayList<THRegionLocation>(locations.size()); + for (HRegionLocation hrl:locations) { + tlocations.add(regionLocationFromHBase(hrl)); + } + return tlocations; + } + /** * Adds all the attributes into the Operation object */
