HBASE-17737 Thrift2 proxy should support scan timeRange per column family
-- .../hadoop/hbase/thrift2/ThriftUtilities.java | 11 + .../hadoop/hbase/thrift2/generated/TScan.java | 234 ++++++++++++++++++--- .../org/apache/hadoop/hbase/thrift2/hbase.thrift | 3 +- .../thrift2/TestThriftHBaseServiceHandler.java | 63 ++++++ 4 files changed, 279 insertions(+), 32 deletions(-) Signed-off-by: tedyu <yuzhihong@gmail.com>
This commit is contained in:
parent
58c76192bd
commit
e239e8d2d3
|
@ -26,6 +26,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.collections.MapUtils;
|
||||||
import org.apache.hadoop.hbase.HRegionInfo;
|
import org.apache.hadoop.hbase.HRegionInfo;
|
||||||
import org.apache.hadoop.hbase.HRegionLocation;
|
import org.apache.hadoop.hbase.HRegionLocation;
|
||||||
import org.apache.hadoop.hbase.ServerName;
|
import org.apache.hadoop.hbase.ServerName;
|
||||||
|
@ -434,6 +435,16 @@ public class ThriftUtilities {
|
||||||
out.setCacheBlocks(in.isCacheBlocks());
|
out.setCacheBlocks(in.isCacheBlocks());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in.isSetColFamTimeRangeMap()) {
|
||||||
|
Map<ByteBuffer, TTimeRange> colFamTimeRangeMap = in.getColFamTimeRangeMap();
|
||||||
|
if (MapUtils.isNotEmpty(colFamTimeRangeMap)) {
|
||||||
|
for (Map.Entry<ByteBuffer, TTimeRange> entry : colFamTimeRangeMap.entrySet()) {
|
||||||
|
out.setColumnFamilyTimeRange(Bytes.toBytes(entry.getKey()),
|
||||||
|
entry.getValue().getMinStamp(), entry.getValue().getMaxStamp());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,10 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
|
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
|
||||||
/**
|
/**
|
||||||
* Any timestamps in the columns are ignored, use timeRange to select by timestamp.
|
* Any timestamps in the columns are ignored but the colFamTimeRangeMap included, use timeRange to select by timestamp.
|
||||||
* Max versions defaults to 1.
|
* Max versions defaults to 1.
|
||||||
*/
|
*/
|
||||||
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-05-25")
|
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2017-03-06")
|
||||||
public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, java.io.Serializable, Cloneable, Comparable<TScan> {
|
public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, java.io.Serializable, Cloneable, Comparable<TScan> {
|
||||||
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TScan");
|
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TScan");
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
private static final org.apache.thrift.protocol.TField AUTHORIZATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("authorizations", org.apache.thrift.protocol.TType.STRUCT, (short)10);
|
private static final org.apache.thrift.protocol.TField AUTHORIZATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("authorizations", org.apache.thrift.protocol.TType.STRUCT, (short)10);
|
||||||
private static final org.apache.thrift.protocol.TField REVERSED_FIELD_DESC = new org.apache.thrift.protocol.TField("reversed", org.apache.thrift.protocol.TType.BOOL, (short)11);
|
private static final org.apache.thrift.protocol.TField REVERSED_FIELD_DESC = new org.apache.thrift.protocol.TField("reversed", org.apache.thrift.protocol.TType.BOOL, (short)11);
|
||||||
private static final org.apache.thrift.protocol.TField CACHE_BLOCKS_FIELD_DESC = new org.apache.thrift.protocol.TField("cacheBlocks", org.apache.thrift.protocol.TType.BOOL, (short)12);
|
private static final org.apache.thrift.protocol.TField CACHE_BLOCKS_FIELD_DESC = new org.apache.thrift.protocol.TField("cacheBlocks", org.apache.thrift.protocol.TType.BOOL, (short)12);
|
||||||
|
private static final org.apache.thrift.protocol.TField COL_FAM_TIME_RANGE_MAP_FIELD_DESC = new org.apache.thrift.protocol.TField("colFamTimeRangeMap", org.apache.thrift.protocol.TType.MAP, (short)13);
|
||||||
|
|
||||||
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
|
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
|
||||||
static {
|
static {
|
||||||
|
@ -73,6 +74,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
public TAuthorization authorizations; // optional
|
public TAuthorization authorizations; // optional
|
||||||
public boolean reversed; // optional
|
public boolean reversed; // optional
|
||||||
public boolean cacheBlocks; // optional
|
public boolean cacheBlocks; // optional
|
||||||
|
public Map<ByteBuffer,TTimeRange> colFamTimeRangeMap; // optional
|
||||||
|
|
||||||
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
|
/** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
|
||||||
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
|
public enum _Fields implements org.apache.thrift.TFieldIdEnum {
|
||||||
|
@ -87,7 +89,8 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
ATTRIBUTES((short)9, "attributes"),
|
ATTRIBUTES((short)9, "attributes"),
|
||||||
AUTHORIZATIONS((short)10, "authorizations"),
|
AUTHORIZATIONS((short)10, "authorizations"),
|
||||||
REVERSED((short)11, "reversed"),
|
REVERSED((short)11, "reversed"),
|
||||||
CACHE_BLOCKS((short)12, "cacheBlocks");
|
CACHE_BLOCKS((short)12, "cacheBlocks"),
|
||||||
|
COL_FAM_TIME_RANGE_MAP((short)13, "colFamTimeRangeMap");
|
||||||
|
|
||||||
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
|
private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
|
||||||
|
|
||||||
|
@ -126,6 +129,8 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
return REVERSED;
|
return REVERSED;
|
||||||
case 12: // CACHE_BLOCKS
|
case 12: // CACHE_BLOCKS
|
||||||
return CACHE_BLOCKS;
|
return CACHE_BLOCKS;
|
||||||
|
case 13: // COL_FAM_TIME_RANGE_MAP
|
||||||
|
return COL_FAM_TIME_RANGE_MAP;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -172,7 +177,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
private static final int __REVERSED_ISSET_ID = 3;
|
private static final int __REVERSED_ISSET_ID = 3;
|
||||||
private static final int __CACHEBLOCKS_ISSET_ID = 4;
|
private static final int __CACHEBLOCKS_ISSET_ID = 4;
|
||||||
private byte __isset_bitfield = 0;
|
private byte __isset_bitfield = 0;
|
||||||
private static final _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.COLUMNS,_Fields.CACHING,_Fields.MAX_VERSIONS,_Fields.TIME_RANGE,_Fields.FILTER_STRING,_Fields.BATCH_SIZE,_Fields.ATTRIBUTES,_Fields.AUTHORIZATIONS,_Fields.REVERSED,_Fields.CACHE_BLOCKS};
|
private static final _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.COLUMNS,_Fields.CACHING,_Fields.MAX_VERSIONS,_Fields.TIME_RANGE,_Fields.FILTER_STRING,_Fields.BATCH_SIZE,_Fields.ATTRIBUTES,_Fields.AUTHORIZATIONS,_Fields.REVERSED,_Fields.CACHE_BLOCKS,_Fields.COL_FAM_TIME_RANGE_MAP};
|
||||||
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
|
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
|
||||||
static {
|
static {
|
||||||
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
|
Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
|
||||||
|
@ -203,6 +208,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
|
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
|
||||||
tmpMap.put(_Fields.CACHE_BLOCKS, new org.apache.thrift.meta_data.FieldMetaData("cacheBlocks", org.apache.thrift.TFieldRequirementType.OPTIONAL,
|
tmpMap.put(_Fields.CACHE_BLOCKS, new org.apache.thrift.meta_data.FieldMetaData("cacheBlocks", org.apache.thrift.TFieldRequirementType.OPTIONAL,
|
||||||
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
|
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
|
||||||
|
tmpMap.put(_Fields.COL_FAM_TIME_RANGE_MAP, new org.apache.thrift.meta_data.FieldMetaData("colFamTimeRangeMap", org.apache.thrift.TFieldRequirementType.OPTIONAL,
|
||||||
|
new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP,
|
||||||
|
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING , true),
|
||||||
|
new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTimeRange.class))));
|
||||||
metaDataMap = Collections.unmodifiableMap(tmpMap);
|
metaDataMap = Collections.unmodifiableMap(tmpMap);
|
||||||
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TScan.class, metaDataMap);
|
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TScan.class, metaDataMap);
|
||||||
}
|
}
|
||||||
|
@ -248,6 +257,21 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
}
|
}
|
||||||
this.reversed = other.reversed;
|
this.reversed = other.reversed;
|
||||||
this.cacheBlocks = other.cacheBlocks;
|
this.cacheBlocks = other.cacheBlocks;
|
||||||
|
if (other.isSetColFamTimeRangeMap()) {
|
||||||
|
Map<ByteBuffer,TTimeRange> __this__colFamTimeRangeMap = new HashMap<ByteBuffer,TTimeRange>(other.colFamTimeRangeMap.size());
|
||||||
|
for (Map.Entry<ByteBuffer, TTimeRange> other_element : other.colFamTimeRangeMap.entrySet()) {
|
||||||
|
|
||||||
|
ByteBuffer other_element_key = other_element.getKey();
|
||||||
|
TTimeRange other_element_value = other_element.getValue();
|
||||||
|
|
||||||
|
ByteBuffer __this__colFamTimeRangeMap_copy_key = org.apache.thrift.TBaseHelper.copyBinary(other_element_key);
|
||||||
|
|
||||||
|
TTimeRange __this__colFamTimeRangeMap_copy_value = new TTimeRange(other_element_value);
|
||||||
|
|
||||||
|
__this__colFamTimeRangeMap.put(__this__colFamTimeRangeMap_copy_key, __this__colFamTimeRangeMap_copy_value);
|
||||||
|
}
|
||||||
|
this.colFamTimeRangeMap = __this__colFamTimeRangeMap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TScan deepCopy() {
|
public TScan deepCopy() {
|
||||||
|
@ -273,6 +297,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
this.reversed = false;
|
this.reversed = false;
|
||||||
setCacheBlocksIsSet(false);
|
setCacheBlocksIsSet(false);
|
||||||
this.cacheBlocks = false;
|
this.cacheBlocks = false;
|
||||||
|
this.colFamTimeRangeMap = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getStartRow() {
|
public byte[] getStartRow() {
|
||||||
|
@ -614,6 +639,41 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __CACHEBLOCKS_ISSET_ID, value);
|
__isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __CACHEBLOCKS_ISSET_ID, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getColFamTimeRangeMapSize() {
|
||||||
|
return (this.colFamTimeRangeMap == null) ? 0 : this.colFamTimeRangeMap.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putToColFamTimeRangeMap(ByteBuffer key, TTimeRange val) {
|
||||||
|
if (this.colFamTimeRangeMap == null) {
|
||||||
|
this.colFamTimeRangeMap = new HashMap<ByteBuffer,TTimeRange>();
|
||||||
|
}
|
||||||
|
this.colFamTimeRangeMap.put(key, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<ByteBuffer,TTimeRange> getColFamTimeRangeMap() {
|
||||||
|
return this.colFamTimeRangeMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TScan setColFamTimeRangeMap(Map<ByteBuffer,TTimeRange> colFamTimeRangeMap) {
|
||||||
|
this.colFamTimeRangeMap = colFamTimeRangeMap;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unsetColFamTimeRangeMap() {
|
||||||
|
this.colFamTimeRangeMap = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns true if field colFamTimeRangeMap is set (has been assigned a value) and false otherwise */
|
||||||
|
public boolean isSetColFamTimeRangeMap() {
|
||||||
|
return this.colFamTimeRangeMap != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColFamTimeRangeMapIsSet(boolean value) {
|
||||||
|
if (!value) {
|
||||||
|
this.colFamTimeRangeMap = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setFieldValue(_Fields field, Object value) {
|
public void setFieldValue(_Fields field, Object value) {
|
||||||
switch (field) {
|
switch (field) {
|
||||||
case START_ROW:
|
case START_ROW:
|
||||||
|
@ -712,6 +772,14 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case COL_FAM_TIME_RANGE_MAP:
|
||||||
|
if (value == null) {
|
||||||
|
unsetColFamTimeRangeMap();
|
||||||
|
} else {
|
||||||
|
setColFamTimeRangeMap((Map<ByteBuffer,TTimeRange>)value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -753,6 +821,9 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
case CACHE_BLOCKS:
|
case CACHE_BLOCKS:
|
||||||
return isCacheBlocks();
|
return isCacheBlocks();
|
||||||
|
|
||||||
|
case COL_FAM_TIME_RANGE_MAP:
|
||||||
|
return getColFamTimeRangeMap();
|
||||||
|
|
||||||
}
|
}
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -788,6 +859,8 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
return isSetReversed();
|
return isSetReversed();
|
||||||
case CACHE_BLOCKS:
|
case CACHE_BLOCKS:
|
||||||
return isSetCacheBlocks();
|
return isSetCacheBlocks();
|
||||||
|
case COL_FAM_TIME_RANGE_MAP:
|
||||||
|
return isSetColFamTimeRangeMap();
|
||||||
}
|
}
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -913,6 +986,15 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean this_present_colFamTimeRangeMap = true && this.isSetColFamTimeRangeMap();
|
||||||
|
boolean that_present_colFamTimeRangeMap = true && that.isSetColFamTimeRangeMap();
|
||||||
|
if (this_present_colFamTimeRangeMap || that_present_colFamTimeRangeMap) {
|
||||||
|
if (!(this_present_colFamTimeRangeMap && that_present_colFamTimeRangeMap))
|
||||||
|
return false;
|
||||||
|
if (!this.colFamTimeRangeMap.equals(that.colFamTimeRangeMap))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -980,6 +1062,11 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
if (present_cacheBlocks)
|
if (present_cacheBlocks)
|
||||||
list.add(cacheBlocks);
|
list.add(cacheBlocks);
|
||||||
|
|
||||||
|
boolean present_colFamTimeRangeMap = true && (isSetColFamTimeRangeMap());
|
||||||
|
list.add(present_colFamTimeRangeMap);
|
||||||
|
if (present_colFamTimeRangeMap)
|
||||||
|
list.add(colFamTimeRangeMap);
|
||||||
|
|
||||||
return list.hashCode();
|
return list.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1111,6 +1198,16 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
return lastComparison;
|
return lastComparison;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lastComparison = Boolean.valueOf(isSetColFamTimeRangeMap()).compareTo(other.isSetColFamTimeRangeMap());
|
||||||
|
if (lastComparison != 0) {
|
||||||
|
return lastComparison;
|
||||||
|
}
|
||||||
|
if (isSetColFamTimeRangeMap()) {
|
||||||
|
lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.colFamTimeRangeMap, other.colFamTimeRangeMap);
|
||||||
|
if (lastComparison != 0) {
|
||||||
|
return lastComparison;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1230,6 +1327,16 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
sb.append(this.cacheBlocks);
|
sb.append(this.cacheBlocks);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
if (isSetColFamTimeRangeMap()) {
|
||||||
|
if (!first) sb.append(", ");
|
||||||
|
sb.append("colFamTimeRangeMap:");
|
||||||
|
if (this.colFamTimeRangeMap == null) {
|
||||||
|
sb.append("null");
|
||||||
|
} else {
|
||||||
|
sb.append(this.colFamTimeRangeMap);
|
||||||
|
}
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
sb.append(")");
|
sb.append(")");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
@ -1402,6 +1509,27 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
|
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 13: // COL_FAM_TIME_RANGE_MAP
|
||||||
|
if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
|
||||||
|
{
|
||||||
|
org.apache.thrift.protocol.TMap _map113 = iprot.readMapBegin();
|
||||||
|
struct.colFamTimeRangeMap = new HashMap<ByteBuffer,TTimeRange>(2*_map113.size);
|
||||||
|
ByteBuffer _key114;
|
||||||
|
TTimeRange _val115;
|
||||||
|
for (int _i116 = 0; _i116 < _map113.size; ++_i116)
|
||||||
|
{
|
||||||
|
_key114 = iprot.readBinary();
|
||||||
|
_val115 = new TTimeRange();
|
||||||
|
_val115.read(iprot);
|
||||||
|
struct.colFamTimeRangeMap.put(_key114, _val115);
|
||||||
|
}
|
||||||
|
iprot.readMapEnd();
|
||||||
|
}
|
||||||
|
struct.setColFamTimeRangeMapIsSet(true);
|
||||||
|
} else {
|
||||||
|
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
|
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
|
||||||
}
|
}
|
||||||
|
@ -1436,9 +1564,9 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
oprot.writeFieldBegin(COLUMNS_FIELD_DESC);
|
oprot.writeFieldBegin(COLUMNS_FIELD_DESC);
|
||||||
{
|
{
|
||||||
oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.columns.size()));
|
oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.columns.size()));
|
||||||
for (TColumn _iter113 : struct.columns)
|
for (TColumn _iter117 : struct.columns)
|
||||||
{
|
{
|
||||||
_iter113.write(oprot);
|
_iter117.write(oprot);
|
||||||
}
|
}
|
||||||
oprot.writeListEnd();
|
oprot.writeListEnd();
|
||||||
}
|
}
|
||||||
|
@ -1479,10 +1607,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
oprot.writeFieldBegin(ATTRIBUTES_FIELD_DESC);
|
oprot.writeFieldBegin(ATTRIBUTES_FIELD_DESC);
|
||||||
{
|
{
|
||||||
oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, struct.attributes.size()));
|
oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, struct.attributes.size()));
|
||||||
for (Map.Entry<ByteBuffer, ByteBuffer> _iter114 : struct.attributes.entrySet())
|
for (Map.Entry<ByteBuffer, ByteBuffer> _iter118 : struct.attributes.entrySet())
|
||||||
{
|
{
|
||||||
oprot.writeBinary(_iter114.getKey());
|
oprot.writeBinary(_iter118.getKey());
|
||||||
oprot.writeBinary(_iter114.getValue());
|
oprot.writeBinary(_iter118.getValue());
|
||||||
}
|
}
|
||||||
oprot.writeMapEnd();
|
oprot.writeMapEnd();
|
||||||
}
|
}
|
||||||
|
@ -1506,6 +1634,21 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
oprot.writeBool(struct.cacheBlocks);
|
oprot.writeBool(struct.cacheBlocks);
|
||||||
oprot.writeFieldEnd();
|
oprot.writeFieldEnd();
|
||||||
}
|
}
|
||||||
|
if (struct.colFamTimeRangeMap != null) {
|
||||||
|
if (struct.isSetColFamTimeRangeMap()) {
|
||||||
|
oprot.writeFieldBegin(COL_FAM_TIME_RANGE_MAP_FIELD_DESC);
|
||||||
|
{
|
||||||
|
oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, struct.colFamTimeRangeMap.size()));
|
||||||
|
for (Map.Entry<ByteBuffer, TTimeRange> _iter119 : struct.colFamTimeRangeMap.entrySet())
|
||||||
|
{
|
||||||
|
oprot.writeBinary(_iter119.getKey());
|
||||||
|
_iter119.getValue().write(oprot);
|
||||||
|
}
|
||||||
|
oprot.writeMapEnd();
|
||||||
|
}
|
||||||
|
oprot.writeFieldEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
oprot.writeFieldStop();
|
oprot.writeFieldStop();
|
||||||
oprot.writeStructEnd();
|
oprot.writeStructEnd();
|
||||||
}
|
}
|
||||||
|
@ -1560,7 +1703,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
if (struct.isSetCacheBlocks()) {
|
if (struct.isSetCacheBlocks()) {
|
||||||
optionals.set(11);
|
optionals.set(11);
|
||||||
}
|
}
|
||||||
oprot.writeBitSet(optionals, 12);
|
if (struct.isSetColFamTimeRangeMap()) {
|
||||||
|
optionals.set(12);
|
||||||
|
}
|
||||||
|
oprot.writeBitSet(optionals, 13);
|
||||||
if (struct.isSetStartRow()) {
|
if (struct.isSetStartRow()) {
|
||||||
oprot.writeBinary(struct.startRow);
|
oprot.writeBinary(struct.startRow);
|
||||||
}
|
}
|
||||||
|
@ -1570,9 +1716,9 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
if (struct.isSetColumns()) {
|
if (struct.isSetColumns()) {
|
||||||
{
|
{
|
||||||
oprot.writeI32(struct.columns.size());
|
oprot.writeI32(struct.columns.size());
|
||||||
for (TColumn _iter115 : struct.columns)
|
for (TColumn _iter120 : struct.columns)
|
||||||
{
|
{
|
||||||
_iter115.write(oprot);
|
_iter120.write(oprot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1594,10 +1740,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
if (struct.isSetAttributes()) {
|
if (struct.isSetAttributes()) {
|
||||||
{
|
{
|
||||||
oprot.writeI32(struct.attributes.size());
|
oprot.writeI32(struct.attributes.size());
|
||||||
for (Map.Entry<ByteBuffer, ByteBuffer> _iter116 : struct.attributes.entrySet())
|
for (Map.Entry<ByteBuffer, ByteBuffer> _iter121 : struct.attributes.entrySet())
|
||||||
{
|
{
|
||||||
oprot.writeBinary(_iter116.getKey());
|
oprot.writeBinary(_iter121.getKey());
|
||||||
oprot.writeBinary(_iter116.getValue());
|
oprot.writeBinary(_iter121.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1610,12 +1756,22 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
if (struct.isSetCacheBlocks()) {
|
if (struct.isSetCacheBlocks()) {
|
||||||
oprot.writeBool(struct.cacheBlocks);
|
oprot.writeBool(struct.cacheBlocks);
|
||||||
}
|
}
|
||||||
|
if (struct.isSetColFamTimeRangeMap()) {
|
||||||
|
{
|
||||||
|
oprot.writeI32(struct.colFamTimeRangeMap.size());
|
||||||
|
for (Map.Entry<ByteBuffer, TTimeRange> _iter122 : struct.colFamTimeRangeMap.entrySet())
|
||||||
|
{
|
||||||
|
oprot.writeBinary(_iter122.getKey());
|
||||||
|
_iter122.getValue().write(oprot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read(org.apache.thrift.protocol.TProtocol prot, TScan struct) throws org.apache.thrift.TException {
|
public void read(org.apache.thrift.protocol.TProtocol prot, TScan struct) throws org.apache.thrift.TException {
|
||||||
TTupleProtocol iprot = (TTupleProtocol) prot;
|
TTupleProtocol iprot = (TTupleProtocol) prot;
|
||||||
BitSet incoming = iprot.readBitSet(12);
|
BitSet incoming = iprot.readBitSet(13);
|
||||||
if (incoming.get(0)) {
|
if (incoming.get(0)) {
|
||||||
struct.startRow = iprot.readBinary();
|
struct.startRow = iprot.readBinary();
|
||||||
struct.setStartRowIsSet(true);
|
struct.setStartRowIsSet(true);
|
||||||
|
@ -1626,14 +1782,14 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
}
|
}
|
||||||
if (incoming.get(2)) {
|
if (incoming.get(2)) {
|
||||||
{
|
{
|
||||||
org.apache.thrift.protocol.TList _list117 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
|
org.apache.thrift.protocol.TList _list123 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
|
||||||
struct.columns = new ArrayList<TColumn>(_list117.size);
|
struct.columns = new ArrayList<TColumn>(_list123.size);
|
||||||
TColumn _elem118;
|
TColumn _elem124;
|
||||||
for (int _i119 = 0; _i119 < _list117.size; ++_i119)
|
for (int _i125 = 0; _i125 < _list123.size; ++_i125)
|
||||||
{
|
{
|
||||||
_elem118 = new TColumn();
|
_elem124 = new TColumn();
|
||||||
_elem118.read(iprot);
|
_elem124.read(iprot);
|
||||||
struct.columns.add(_elem118);
|
struct.columns.add(_elem124);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
struct.setColumnsIsSet(true);
|
struct.setColumnsIsSet(true);
|
||||||
|
@ -1661,15 +1817,15 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
}
|
}
|
||||||
if (incoming.get(8)) {
|
if (incoming.get(8)) {
|
||||||
{
|
{
|
||||||
org.apache.thrift.protocol.TMap _map120 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
|
org.apache.thrift.protocol.TMap _map126 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
|
||||||
struct.attributes = new HashMap<ByteBuffer,ByteBuffer>(2*_map120.size);
|
struct.attributes = new HashMap<ByteBuffer,ByteBuffer>(2*_map126.size);
|
||||||
ByteBuffer _key121;
|
ByteBuffer _key127;
|
||||||
ByteBuffer _val122;
|
ByteBuffer _val128;
|
||||||
for (int _i123 = 0; _i123 < _map120.size; ++_i123)
|
for (int _i129 = 0; _i129 < _map126.size; ++_i129)
|
||||||
{
|
{
|
||||||
_key121 = iprot.readBinary();
|
_key127 = iprot.readBinary();
|
||||||
_val122 = iprot.readBinary();
|
_val128 = iprot.readBinary();
|
||||||
struct.attributes.put(_key121, _val122);
|
struct.attributes.put(_key127, _val128);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
struct.setAttributesIsSet(true);
|
struct.setAttributesIsSet(true);
|
||||||
|
@ -1687,6 +1843,22 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
|
||||||
struct.cacheBlocks = iprot.readBool();
|
struct.cacheBlocks = iprot.readBool();
|
||||||
struct.setCacheBlocksIsSet(true);
|
struct.setCacheBlocksIsSet(true);
|
||||||
}
|
}
|
||||||
|
if (incoming.get(12)) {
|
||||||
|
{
|
||||||
|
org.apache.thrift.protocol.TMap _map130 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
|
||||||
|
struct.colFamTimeRangeMap = new HashMap<ByteBuffer,TTimeRange>(2*_map130.size);
|
||||||
|
ByteBuffer _key131;
|
||||||
|
TTimeRange _val132;
|
||||||
|
for (int _i133 = 0; _i133 < _map130.size; ++_i133)
|
||||||
|
{
|
||||||
|
_key131 = iprot.readBinary();
|
||||||
|
_val132 = new TTimeRange();
|
||||||
|
_val132.read(iprot);
|
||||||
|
struct.colFamTimeRangeMap.put(_key131, _val132);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
struct.setColFamTimeRangeMapIsSet(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ struct TAppend {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Any timestamps in the columns are ignored, use timeRange to select by timestamp.
|
* Any timestamps in the columns are ignored but the colFamTimeRangeMap included, use timeRange to select by timestamp.
|
||||||
* Max versions defaults to 1.
|
* Max versions defaults to 1.
|
||||||
*/
|
*/
|
||||||
struct TScan {
|
struct TScan {
|
||||||
|
@ -225,6 +225,7 @@ struct TScan {
|
||||||
10: optional TAuthorization authorizations
|
10: optional TAuthorization authorizations
|
||||||
11: optional bool reversed
|
11: optional bool reversed
|
||||||
12: optional bool cacheBlocks
|
12: optional bool cacheBlocks
|
||||||
|
13: optional map<binary,TTimeRange> colFamTimeRangeMap
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
package org.apache.hadoop.hbase.thrift2;
|
package org.apache.hadoop.hbase.thrift2;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
@ -65,6 +66,7 @@ import org.apache.hadoop.hbase.thrift2.generated.TScan;
|
||||||
import org.apache.hadoop.hbase.thrift2.generated.TMutation;
|
import org.apache.hadoop.hbase.thrift2.generated.TMutation;
|
||||||
import org.apache.hadoop.hbase.thrift2.generated.TRowMutations;
|
import org.apache.hadoop.hbase.thrift2.generated.TRowMutations;
|
||||||
import org.apache.hadoop.hbase.thrift2.generated.TDurability;
|
import org.apache.hadoop.hbase.thrift2.generated.TDurability;
|
||||||
|
import org.apache.hadoop.hbase.thrift2.generated.TTimeRange;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.apache.thrift.TException;
|
import org.apache.thrift.TException;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
|
@ -787,6 +789,67 @@ public class TestThriftHBaseServiceHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScanWithColumnFamilyTimeRange() throws Exception {
|
||||||
|
ThriftHBaseServiceHandler handler = createHandler();
|
||||||
|
ByteBuffer table = wrap(tableAname);
|
||||||
|
|
||||||
|
// insert data
|
||||||
|
TColumnValue familyAColumnValue = new TColumnValue(wrap(familyAname), wrap(qualifierAname),
|
||||||
|
wrap(valueAname));
|
||||||
|
TColumnValue familyBColumnValue = new TColumnValue(wrap(familyBname), wrap(qualifierBname),
|
||||||
|
wrap(valueBname));
|
||||||
|
long minTimestamp = System.currentTimeMillis();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
familyAColumnValue.setTimestamp(minTimestamp + i);
|
||||||
|
familyBColumnValue.setTimestamp(minTimestamp + i);
|
||||||
|
List<TColumnValue> columnValues = new ArrayList<>(2);
|
||||||
|
columnValues.add(familyAColumnValue);
|
||||||
|
columnValues.add(familyBColumnValue);
|
||||||
|
TPut put = new TPut(wrap(("testScanWithColumnFamilyTimeRange" + i).getBytes()),
|
||||||
|
columnValues);
|
||||||
|
handler.put(table, put);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create scan instance with column family time range
|
||||||
|
TScan scan = new TScan();
|
||||||
|
Map<ByteBuffer,TTimeRange> colFamTimeRangeMap = new HashMap<>(2);
|
||||||
|
colFamTimeRangeMap.put(wrap(familyAname), new TTimeRange(minTimestamp + 3, minTimestamp + 5));
|
||||||
|
colFamTimeRangeMap.put(wrap(familyBname), new TTimeRange(minTimestamp + 6, minTimestamp + 9));
|
||||||
|
scan.setColFamTimeRangeMap(colFamTimeRangeMap);
|
||||||
|
|
||||||
|
// get scanner and rows
|
||||||
|
int scanId = handler.openScanner(table, scan);
|
||||||
|
List<TResult> results = handler.getScannerRows(scanId, 5);
|
||||||
|
assertEquals(5, results.size());
|
||||||
|
int familyACount = 0;
|
||||||
|
int familyBCount = 0;
|
||||||
|
for (TResult result : results) {
|
||||||
|
List<TColumnValue> columnValues = result.getColumnValues();
|
||||||
|
if (CollectionUtils.isNotEmpty(columnValues)) {
|
||||||
|
if (Bytes.equals(familyAname, columnValues.get(0).getFamily())) {
|
||||||
|
familyACount++;
|
||||||
|
} else if (Bytes.equals(familyBname, columnValues.get(0).getFamily())) {
|
||||||
|
familyBCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(2, familyACount);
|
||||||
|
assertEquals(3, familyBCount);
|
||||||
|
|
||||||
|
// check that we are at the end of the scan
|
||||||
|
results = handler.getScannerRows(scanId, 1);
|
||||||
|
assertEquals(0, results.size());
|
||||||
|
|
||||||
|
// close scanner and check that it was indeed closed
|
||||||
|
handler.closeScanner(scanId);
|
||||||
|
try {
|
||||||
|
handler.getScannerRows(scanId, 1);
|
||||||
|
fail("Scanner id should be invalid");
|
||||||
|
} catch (TIllegalArgument e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPutTTL() throws Exception {
|
public void testPutTTL() throws Exception {
|
||||||
ThriftHBaseServiceHandler handler = createHandler();
|
ThriftHBaseServiceHandler handler = createHandler();
|
||||||
|
|
Loading…
Reference in New Issue