HBASE-13698 Add RegionLocator methods to Thrift2

This commit is contained in:
Elliott Clark 2015-05-18 15:57:28 -07:00
parent 315f596798
commit 1bfe387956
9 changed files with 5470 additions and 1056 deletions

View File

@ -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>

View File

@ -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);
}
}
}
}
}

View File

@ -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
*/

View File

@ -0,0 +1,498 @@
/**
* Autogenerated by Thrift Compiler (0.9.0)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
* @generated
*/
package org.apache.hadoop.hbase.thrift2.generated;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;
import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class THRegionLocation implements org.apache.thrift.TBase<THRegionLocation, THRegionLocation._Fields>, java.io.Serializable, Cloneable {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("THRegionLocation");
private static final org.apache.thrift.protocol.TField SERVER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("serverName", org.apache.thrift.protocol.TType.STRUCT, (short)1);
private static final org.apache.thrift.protocol.TField REGION_INFO_FIELD_DESC = new org.apache.thrift.protocol.TField("regionInfo", org.apache.thrift.protocol.TType.STRUCT, (short)2);
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new THRegionLocationStandardSchemeFactory());
schemes.put(TupleScheme.class, new THRegionLocationTupleSchemeFactory());
}
public TServerName serverName; // required
public THRegionInfo regionInfo; // required
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
SERVER_NAME((short)1, "serverName"),
REGION_INFO((short)2, "regionInfo");
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
static {
for (_Fields field : EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
}
/**
* Find the _Fields constant that matches fieldId, or null if its not found.
*/
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // SERVER_NAME
return SERVER_NAME;
case 2: // REGION_INFO
return REGION_INFO;
default:
return null;
}
}
/**
* Find the _Fields constant that matches fieldId, throwing an exception
* if it is not found.
*/
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
}
/**
* Find the _Fields constant that matches name, or null if its not found.
*/
public static _Fields findByName(String name) {
return byName.get(name);
}
private final short _thriftId;
private final String _fieldName;
_Fields(short thriftId, String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
}
public short getThriftFieldId() {
return _thriftId;
}
public String getFieldName() {
return _fieldName;
}
}
// isset id assignments
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.SERVER_NAME, new org.apache.thrift.meta_data.FieldMetaData("serverName", org.apache.thrift.TFieldRequirementType.REQUIRED,
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TServerName.class)));
tmpMap.put(_Fields.REGION_INFO, new org.apache.thrift.meta_data.FieldMetaData("regionInfo", org.apache.thrift.TFieldRequirementType.REQUIRED,
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, THRegionInfo.class)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(THRegionLocation.class, metaDataMap);
}
public THRegionLocation() {
}
public THRegionLocation(
TServerName serverName,
THRegionInfo regionInfo)
{
this();
this.serverName = serverName;
this.regionInfo = regionInfo;
}
/**
* Performs a deep copy on <i>other</i>.
*/
public THRegionLocation(THRegionLocation other) {
if (other.isSetServerName()) {
this.serverName = new TServerName(other.serverName);
}
if (other.isSetRegionInfo()) {
this.regionInfo = new THRegionInfo(other.regionInfo);
}
}
public THRegionLocation deepCopy() {
return new THRegionLocation(this);
}
@Override
public void clear() {
this.serverName = null;
this.regionInfo = null;
}
public TServerName getServerName() {
return this.serverName;
}
public THRegionLocation setServerName(TServerName serverName) {
this.serverName = serverName;
return this;
}
public void unsetServerName() {
this.serverName = null;
}
/** Returns true if field serverName is set (has been assigned a value) and false otherwise */
public boolean isSetServerName() {
return this.serverName != null;
}
public void setServerNameIsSet(boolean value) {
if (!value) {
this.serverName = null;
}
}
public THRegionInfo getRegionInfo() {
return this.regionInfo;
}
public THRegionLocation setRegionInfo(THRegionInfo regionInfo) {
this.regionInfo = regionInfo;
return this;
}
public void unsetRegionInfo() {
this.regionInfo = null;
}
/** Returns true if field regionInfo is set (has been assigned a value) and false otherwise */
public boolean isSetRegionInfo() {
return this.regionInfo != null;
}
public void setRegionInfoIsSet(boolean value) {
if (!value) {
this.regionInfo = null;
}
}
public void setFieldValue(_Fields field, Object value) {
switch (field) {
case SERVER_NAME:
if (value == null) {
unsetServerName();
} else {
setServerName((TServerName)value);
}
break;
case REGION_INFO:
if (value == null) {
unsetRegionInfo();
} else {
setRegionInfo((THRegionInfo)value);
}
break;
}
}
public Object getFieldValue(_Fields field) {
switch (field) {
case SERVER_NAME:
return getServerName();
case REGION_INFO:
return getRegionInfo();
}
throw new IllegalStateException();
}
/** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
public boolean isSet(_Fields field) {
if (field == null) {
throw new IllegalArgumentException();
}
switch (field) {
case SERVER_NAME:
return isSetServerName();
case REGION_INFO:
return isSetRegionInfo();
}
throw new IllegalStateException();
}
@Override
public boolean equals(Object that) {
if (that == null)
return false;
if (that instanceof THRegionLocation)
return this.equals((THRegionLocation)that);
return false;
}
public boolean equals(THRegionLocation that) {
if (that == null)
return false;
boolean this_present_serverName = true && this.isSetServerName();
boolean that_present_serverName = true && that.isSetServerName();
if (this_present_serverName || that_present_serverName) {
if (!(this_present_serverName && that_present_serverName))
return false;
if (!this.serverName.equals(that.serverName))
return false;
}
boolean this_present_regionInfo = true && this.isSetRegionInfo();
boolean that_present_regionInfo = true && that.isSetRegionInfo();
if (this_present_regionInfo || that_present_regionInfo) {
if (!(this_present_regionInfo && that_present_regionInfo))
return false;
if (!this.regionInfo.equals(that.regionInfo))
return false;
}
return true;
}
@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
boolean present_serverName = true && (isSetServerName());
builder.append(present_serverName);
if (present_serverName)
builder.append(serverName);
boolean present_regionInfo = true && (isSetRegionInfo());
builder.append(present_regionInfo);
if (present_regionInfo)
builder.append(regionInfo);
return builder.toHashCode();
}
public int compareTo(THRegionLocation other) {
if (!getClass().equals(other.getClass())) {
return getClass().getName().compareTo(other.getClass().getName());
}
int lastComparison = 0;
THRegionLocation typedOther = (THRegionLocation)other;
lastComparison = Boolean.valueOf(isSetServerName()).compareTo(typedOther.isSetServerName());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetServerName()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.serverName, typedOther.serverName);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetRegionInfo()).compareTo(typedOther.isSetRegionInfo());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetRegionInfo()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.regionInfo, typedOther.regionInfo);
if (lastComparison != 0) {
return lastComparison;
}
}
return 0;
}
public _Fields fieldForId(int fieldId) {
return _Fields.findByThriftId(fieldId);
}
public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
}
public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("THRegionLocation(");
boolean first = true;
sb.append("serverName:");
if (this.serverName == null) {
sb.append("null");
} else {
sb.append(this.serverName);
}
first = false;
if (!first) sb.append(", ");
sb.append("regionInfo:");
if (this.regionInfo == null) {
sb.append("null");
} else {
sb.append(this.regionInfo);
}
first = false;
sb.append(")");
return sb.toString();
}
public void validate() throws org.apache.thrift.TException {
// check for required fields
if (serverName == null) {
throw new org.apache.thrift.protocol.TProtocolException("Required field 'serverName' was not present! Struct: " + toString());
}
if (regionInfo == null) {
throw new org.apache.thrift.protocol.TProtocolException("Required field 'regionInfo' was not present! Struct: " + toString());
}
// check for sub-struct validity
if (serverName != null) {
serverName.validate();
}
if (regionInfo != null) {
regionInfo.validate();
}
}
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private static class THRegionLocationStandardSchemeFactory implements SchemeFactory {
public THRegionLocationStandardScheme getScheme() {
return new THRegionLocationStandardScheme();
}
}
private static class THRegionLocationStandardScheme extends StandardScheme<THRegionLocation> {
public void read(org.apache.thrift.protocol.TProtocol iprot, THRegionLocation struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true)
{
schemeField = iprot.readFieldBegin();
if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
case 1: // SERVER_NAME
if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
struct.serverName = new TServerName();
struct.serverName.read(iprot);
struct.setServerNameIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 2: // REGION_INFO
if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
struct.regionInfo = new THRegionInfo();
struct.regionInfo.read(iprot);
struct.setRegionInfoIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
iprot.readStructEnd();
// check for required fields of primitive type, which can't be checked in the validate method
struct.validate();
}
public void write(org.apache.thrift.protocol.TProtocol oprot, THRegionLocation struct) throws org.apache.thrift.TException {
struct.validate();
oprot.writeStructBegin(STRUCT_DESC);
if (struct.serverName != null) {
oprot.writeFieldBegin(SERVER_NAME_FIELD_DESC);
struct.serverName.write(oprot);
oprot.writeFieldEnd();
}
if (struct.regionInfo != null) {
oprot.writeFieldBegin(REGION_INFO_FIELD_DESC);
struct.regionInfo.write(oprot);
oprot.writeFieldEnd();
}
oprot.writeFieldStop();
oprot.writeStructEnd();
}
}
private static class THRegionLocationTupleSchemeFactory implements SchemeFactory {
public THRegionLocationTupleScheme getScheme() {
return new THRegionLocationTupleScheme();
}
}
private static class THRegionLocationTupleScheme extends TupleScheme<THRegionLocation> {
@Override
public void write(org.apache.thrift.protocol.TProtocol prot, THRegionLocation struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
struct.serverName.write(oprot);
struct.regionInfo.write(oprot);
}
@Override
public void read(org.apache.thrift.protocol.TProtocol prot, THRegionLocation struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
struct.serverName = new TServerName();
struct.serverName.read(iprot);
struct.setServerNameIsSet(true);
struct.regionInfo = new THRegionInfo();
struct.regionInfo.read(iprot);
struct.setRegionInfoIsSet(true);
}
}
}

View File

@ -103,9 +103,9 @@ public class TMutation extends org.apache.thrift.TUnion<TMutation, TMutation._Fi
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.PUT, new org.apache.thrift.meta_data.FieldMetaData("put", org.apache.thrift.TFieldRequirementType.OPTIONAL,
tmpMap.put(_Fields.PUT, new org.apache.thrift.meta_data.FieldMetaData("put", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TPut.class)));
tmpMap.put(_Fields.DELETE_SINGLE, new org.apache.thrift.meta_data.FieldMetaData("deleteSingle", org.apache.thrift.TFieldRequirementType.OPTIONAL,
tmpMap.put(_Fields.DELETE_SINGLE, new org.apache.thrift.meta_data.FieldMetaData("deleteSingle", org.apache.thrift.TFieldRequirementType.DEFAULT,
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TDelete.class)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TMutation.class, metaDataMap);

View File

@ -0,0 +1,595 @@
/**
* Autogenerated by Thrift Compiler (0.9.0)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
* @generated
*/
package org.apache.hadoop.hbase.thrift2.generated;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;
import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TServerName implements org.apache.thrift.TBase<TServerName, TServerName._Fields>, java.io.Serializable, Cloneable {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TServerName");
private static final org.apache.thrift.protocol.TField HOST_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("hostName", org.apache.thrift.protocol.TType.STRING, (short)1);
private static final org.apache.thrift.protocol.TField PORT_FIELD_DESC = new org.apache.thrift.protocol.TField("port", org.apache.thrift.protocol.TType.I32, (short)2);
private static final org.apache.thrift.protocol.TField START_CODE_FIELD_DESC = new org.apache.thrift.protocol.TField("startCode", org.apache.thrift.protocol.TType.I64, (short)3);
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new TServerNameStandardSchemeFactory());
schemes.put(TupleScheme.class, new TServerNameTupleSchemeFactory());
}
public String hostName; // required
public int port; // optional
public long startCode; // optional
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
HOST_NAME((short)1, "hostName"),
PORT((short)2, "port"),
START_CODE((short)3, "startCode");
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
static {
for (_Fields field : EnumSet.allOf(_Fields.class)) {
byName.put(field.getFieldName(), field);
}
}
/**
* Find the _Fields constant that matches fieldId, or null if its not found.
*/
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // HOST_NAME
return HOST_NAME;
case 2: // PORT
return PORT;
case 3: // START_CODE
return START_CODE;
default:
return null;
}
}
/**
* Find the _Fields constant that matches fieldId, throwing an exception
* if it is not found.
*/
public static _Fields findByThriftIdOrThrow(int fieldId) {
_Fields fields = findByThriftId(fieldId);
if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
return fields;
}
/**
* Find the _Fields constant that matches name, or null if its not found.
*/
public static _Fields findByName(String name) {
return byName.get(name);
}
private final short _thriftId;
private final String _fieldName;
_Fields(short thriftId, String fieldName) {
_thriftId = thriftId;
_fieldName = fieldName;
}
public short getThriftFieldId() {
return _thriftId;
}
public String getFieldName() {
return _fieldName;
}
}
// isset id assignments
private static final int __PORT_ISSET_ID = 0;
private static final int __STARTCODE_ISSET_ID = 1;
private byte __isset_bitfield = 0;
private _Fields optionals[] = {_Fields.PORT,_Fields.START_CODE};
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.HOST_NAME, new org.apache.thrift.meta_data.FieldMetaData("hostName", org.apache.thrift.TFieldRequirementType.REQUIRED,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
tmpMap.put(_Fields.PORT, new org.apache.thrift.meta_data.FieldMetaData("port", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.START_CODE, new org.apache.thrift.meta_data.FieldMetaData("startCode", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
metaDataMap = Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TServerName.class, metaDataMap);
}
public TServerName() {
}
public TServerName(
String hostName)
{
this();
this.hostName = hostName;
}
/**
* Performs a deep copy on <i>other</i>.
*/
public TServerName(TServerName other) {
__isset_bitfield = other.__isset_bitfield;
if (other.isSetHostName()) {
this.hostName = other.hostName;
}
this.port = other.port;
this.startCode = other.startCode;
}
public TServerName deepCopy() {
return new TServerName(this);
}
@Override
public void clear() {
this.hostName = null;
setPortIsSet(false);
this.port = 0;
setStartCodeIsSet(false);
this.startCode = 0;
}
public String getHostName() {
return this.hostName;
}
public TServerName setHostName(String hostName) {
this.hostName = hostName;
return this;
}
public void unsetHostName() {
this.hostName = null;
}
/** Returns true if field hostName is set (has been assigned a value) and false otherwise */
public boolean isSetHostName() {
return this.hostName != null;
}
public void setHostNameIsSet(boolean value) {
if (!value) {
this.hostName = null;
}
}
public int getPort() {
return this.port;
}
public TServerName setPort(int port) {
this.port = port;
setPortIsSet(true);
return this;
}
public void unsetPort() {
__isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __PORT_ISSET_ID);
}
/** Returns true if field port is set (has been assigned a value) and false otherwise */
public boolean isSetPort() {
return EncodingUtils.testBit(__isset_bitfield, __PORT_ISSET_ID);
}
public void setPortIsSet(boolean value) {
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __PORT_ISSET_ID, value);
}
public long getStartCode() {
return this.startCode;
}
public TServerName setStartCode(long startCode) {
this.startCode = startCode;
setStartCodeIsSet(true);
return this;
}
public void unsetStartCode() {
__isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __STARTCODE_ISSET_ID);
}
/** Returns true if field startCode is set (has been assigned a value) and false otherwise */
public boolean isSetStartCode() {
return EncodingUtils.testBit(__isset_bitfield, __STARTCODE_ISSET_ID);
}
public void setStartCodeIsSet(boolean value) {
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __STARTCODE_ISSET_ID, value);
}
public void setFieldValue(_Fields field, Object value) {
switch (field) {
case HOST_NAME:
if (value == null) {
unsetHostName();
} else {
setHostName((String)value);
}
break;
case PORT:
if (value == null) {
unsetPort();
} else {
setPort((Integer)value);
}
break;
case START_CODE:
if (value == null) {
unsetStartCode();
} else {
setStartCode((Long)value);
}
break;
}
}
public Object getFieldValue(_Fields field) {
switch (field) {
case HOST_NAME:
return getHostName();
case PORT:
return Integer.valueOf(getPort());
case START_CODE:
return Long.valueOf(getStartCode());
}
throw new IllegalStateException();
}
/** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
public boolean isSet(_Fields field) {
if (field == null) {
throw new IllegalArgumentException();
}
switch (field) {
case HOST_NAME:
return isSetHostName();
case PORT:
return isSetPort();
case START_CODE:
return isSetStartCode();
}
throw new IllegalStateException();
}
@Override
public boolean equals(Object that) {
if (that == null)
return false;
if (that instanceof TServerName)
return this.equals((TServerName)that);
return false;
}
public boolean equals(TServerName that) {
if (that == null)
return false;
boolean this_present_hostName = true && this.isSetHostName();
boolean that_present_hostName = true && that.isSetHostName();
if (this_present_hostName || that_present_hostName) {
if (!(this_present_hostName && that_present_hostName))
return false;
if (!this.hostName.equals(that.hostName))
return false;
}
boolean this_present_port = true && this.isSetPort();
boolean that_present_port = true && that.isSetPort();
if (this_present_port || that_present_port) {
if (!(this_present_port && that_present_port))
return false;
if (this.port != that.port)
return false;
}
boolean this_present_startCode = true && this.isSetStartCode();
boolean that_present_startCode = true && that.isSetStartCode();
if (this_present_startCode || that_present_startCode) {
if (!(this_present_startCode && that_present_startCode))
return false;
if (this.startCode != that.startCode)
return false;
}
return true;
}
@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
boolean present_hostName = true && (isSetHostName());
builder.append(present_hostName);
if (present_hostName)
builder.append(hostName);
boolean present_port = true && (isSetPort());
builder.append(present_port);
if (present_port)
builder.append(port);
boolean present_startCode = true && (isSetStartCode());
builder.append(present_startCode);
if (present_startCode)
builder.append(startCode);
return builder.toHashCode();
}
public int compareTo(TServerName other) {
if (!getClass().equals(other.getClass())) {
return getClass().getName().compareTo(other.getClass().getName());
}
int lastComparison = 0;
TServerName typedOther = (TServerName)other;
lastComparison = Boolean.valueOf(isSetHostName()).compareTo(typedOther.isSetHostName());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetHostName()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.hostName, typedOther.hostName);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetPort()).compareTo(typedOther.isSetPort());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetPort()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.port, typedOther.port);
if (lastComparison != 0) {
return lastComparison;
}
}
lastComparison = Boolean.valueOf(isSetStartCode()).compareTo(typedOther.isSetStartCode());
if (lastComparison != 0) {
return lastComparison;
}
if (isSetStartCode()) {
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.startCode, typedOther.startCode);
if (lastComparison != 0) {
return lastComparison;
}
}
return 0;
}
public _Fields fieldForId(int fieldId) {
return _Fields.findByThriftId(fieldId);
}
public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
}
public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("TServerName(");
boolean first = true;
sb.append("hostName:");
if (this.hostName == null) {
sb.append("null");
} else {
sb.append(this.hostName);
}
first = false;
if (isSetPort()) {
if (!first) sb.append(", ");
sb.append("port:");
sb.append(this.port);
first = false;
}
if (isSetStartCode()) {
if (!first) sb.append(", ");
sb.append("startCode:");
sb.append(this.startCode);
first = false;
}
sb.append(")");
return sb.toString();
}
public void validate() throws org.apache.thrift.TException {
// check for required fields
if (hostName == null) {
throw new org.apache.thrift.protocol.TProtocolException("Required field 'hostName' was not present! Struct: " + toString());
}
// check for sub-struct validity
}
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
try {
// it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
__isset_bitfield = 0;
read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}
private static class TServerNameStandardSchemeFactory implements SchemeFactory {
public TServerNameStandardScheme getScheme() {
return new TServerNameStandardScheme();
}
}
private static class TServerNameStandardScheme extends StandardScheme<TServerName> {
public void read(org.apache.thrift.protocol.TProtocol iprot, TServerName struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
while (true)
{
schemeField = iprot.readFieldBegin();
if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
case 1: // HOST_NAME
if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
struct.hostName = iprot.readString();
struct.setHostNameIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 2: // PORT
if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
struct.port = iprot.readI32();
struct.setPortIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
case 3: // START_CODE
if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
struct.startCode = iprot.readI64();
struct.setStartCodeIsSet(true);
} else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
break;
default:
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
}
iprot.readFieldEnd();
}
iprot.readStructEnd();
// check for required fields of primitive type, which can't be checked in the validate method
struct.validate();
}
public void write(org.apache.thrift.protocol.TProtocol oprot, TServerName struct) throws org.apache.thrift.TException {
struct.validate();
oprot.writeStructBegin(STRUCT_DESC);
if (struct.hostName != null) {
oprot.writeFieldBegin(HOST_NAME_FIELD_DESC);
oprot.writeString(struct.hostName);
oprot.writeFieldEnd();
}
if (struct.isSetPort()) {
oprot.writeFieldBegin(PORT_FIELD_DESC);
oprot.writeI32(struct.port);
oprot.writeFieldEnd();
}
if (struct.isSetStartCode()) {
oprot.writeFieldBegin(START_CODE_FIELD_DESC);
oprot.writeI64(struct.startCode);
oprot.writeFieldEnd();
}
oprot.writeFieldStop();
oprot.writeStructEnd();
}
}
private static class TServerNameTupleSchemeFactory implements SchemeFactory {
public TServerNameTupleScheme getScheme() {
return new TServerNameTupleScheme();
}
}
private static class TServerNameTupleScheme extends TupleScheme<TServerName> {
@Override
public void write(org.apache.thrift.protocol.TProtocol prot, TServerName struct) throws org.apache.thrift.TException {
TTupleProtocol oprot = (TTupleProtocol) prot;
oprot.writeString(struct.hostName);
BitSet optionals = new BitSet();
if (struct.isSetPort()) {
optionals.set(0);
}
if (struct.isSetStartCode()) {
optionals.set(1);
}
oprot.writeBitSet(optionals, 2);
if (struct.isSetPort()) {
oprot.writeI32(struct.port);
}
if (struct.isSetStartCode()) {
oprot.writeI64(struct.startCode);
}
}
@Override
public void read(org.apache.thrift.protocol.TProtocol prot, TServerName struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
struct.hostName = iprot.readString();
struct.setHostNameIsSet(true);
BitSet incoming = iprot.readBitSet(2);
if (incoming.get(0)) {
struct.port = iprot.readI32();
struct.setPortIsSet(true);
}
if (incoming.get(1)) {
struct.startCode = iprot.readI64();
struct.setStartCodeIsSet(true);
}
}
}
}

View File

@ -242,6 +242,27 @@ struct TRowMutations {
2: required list<TMutation> mutations
}
struct THRegionInfo {
1: required i64 regionId
2: required binary tableName
3: optional binary startKey
4: optional binary endKey
5: optional bool offline
6: optional bool split
7: optional i32 replicaId
}
struct TServerName {
1: required string hostName
2: optional i32 port
3: optional i64 startCode
}
struct THRegionLocation {
1: required TServerName serverName
2: required THRegionInfo regionInfo
}
//
// Exceptions
//
@ -512,4 +533,27 @@ service THBaseService {
1: TIOError io
)
/**
* Given a table and a row get the location of the region that
* would contain the given row key.
*
* reload = true means the cache will be cleared and the location
* will be fetched from meta.
*/
THRegionLocation getRegionLocation(
1: required binary table,
2: required binary row,
3: bool reload,
) throws (
1: TIOError io
)
/**
* Get all of the region locations for a given table.
**/
list<THRegionLocation> getAllRegionLocations(
1: required binary table,
) throws (
1: TIOError io
)
}