You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2017/03/08 15:05:49 UTC
hbase git commit: HBASE-17737 Thrift2 proxy should support scan
timeRange per column family
Repository: hbase
Updated Branches:
refs/heads/master 58c76192b -> e239e8d2d
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 <yu...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e239e8d2
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e239e8d2
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e239e8d2
Branch: refs/heads/master
Commit: e239e8d2d317b8f8de652cbf71bf8e33b0807960
Parents: 58c7619
Author: chenyechao <ch...@cmss.chinamobile.com>
Authored: Wed Mar 8 11:08:53 2017 +0800
Committer: tedyu <yu...@gmail.com>
Committed: Wed Mar 8 07:05:44 2017 -0800
----------------------------------------------------------------------
.../hadoop/hbase/thrift2/ThriftUtilities.java | 11 +
.../hadoop/hbase/thrift2/generated/TScan.java | 234 ++++++++++++++++---
.../apache/hadoop/hbase/thrift2/hbase.thrift | 3 +-
.../thrift2/TestThriftHBaseServiceHandler.java | 63 +++++
4 files changed, 279 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/e239e8d2/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 7b4a82b..85d95ea 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,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import org.apache.commons.collections.MapUtils;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.ServerName;
@@ -434,6 +435,16 @@ public class ThriftUtilities {
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;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/e239e8d2/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
index e0bcb55..7531052 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
@@ -35,10 +35,10 @@ import org.slf4j.LoggerFactory;
@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.
*/
-@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> {
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 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 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>();
static {
@@ -73,6 +74,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
public TAuthorization authorizations; // optional
public boolean reversed; // 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. */
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"),
AUTHORIZATIONS((short)10, "authorizations"),
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>();
@@ -126,6 +129,8 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
return REVERSED;
case 12: // CACHE_BLOCKS
return CACHE_BLOCKS;
+ case 13: // COL_FAM_TIME_RANGE_MAP
+ return COL_FAM_TIME_RANGE_MAP;
default:
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 __CACHEBLOCKS_ISSET_ID = 4;
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;
static {
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)));
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)));
+ 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);
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.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() {
@@ -273,6 +297,7 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
this.reversed = false;
setCacheBlocksIsSet(false);
this.cacheBlocks = false;
+ this.colFamTimeRangeMap = null;
}
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);
}
+ 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) {
switch (field) {
case START_ROW:
@@ -712,6 +772,14 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
}
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:
return isCacheBlocks();
+ case COL_FAM_TIME_RANGE_MAP:
+ return getColFamTimeRangeMap();
+
}
throw new IllegalStateException();
}
@@ -788,6 +859,8 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
return isSetReversed();
case CACHE_BLOCKS:
return isSetCacheBlocks();
+ case COL_FAM_TIME_RANGE_MAP:
+ return isSetColFamTimeRangeMap();
}
throw new IllegalStateException();
}
@@ -913,6 +986,15 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
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;
}
@@ -980,6 +1062,11 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
if (present_cacheBlocks)
list.add(cacheBlocks);
+ boolean present_colFamTimeRangeMap = true && (isSetColFamTimeRangeMap());
+ list.add(present_colFamTimeRangeMap);
+ if (present_colFamTimeRangeMap)
+ list.add(colFamTimeRangeMap);
+
return list.hashCode();
}
@@ -1111,6 +1198,16 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
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;
}
@@ -1230,6 +1327,16 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
sb.append(this.cacheBlocks);
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(")");
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);
}
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:
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.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();
}
@@ -1479,10 +1607,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
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()));
- for (Map.Entry<ByteBuffer, ByteBuffer> _iter114 : struct.attributes.entrySet())
+ for (Map.Entry<ByteBuffer, ByteBuffer> _iter118 : struct.attributes.entrySet())
{
- oprot.writeBinary(_iter114.getKey());
- oprot.writeBinary(_iter114.getValue());
+ oprot.writeBinary(_iter118.getKey());
+ oprot.writeBinary(_iter118.getValue());
}
oprot.writeMapEnd();
}
@@ -1506,6 +1634,21 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
oprot.writeBool(struct.cacheBlocks);
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.writeStructEnd();
}
@@ -1560,7 +1703,10 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
if (struct.isSetCacheBlocks()) {
optionals.set(11);
}
- oprot.writeBitSet(optionals, 12);
+ if (struct.isSetColFamTimeRangeMap()) {
+ optionals.set(12);
+ }
+ oprot.writeBitSet(optionals, 13);
if (struct.isSetStartRow()) {
oprot.writeBinary(struct.startRow);
}
@@ -1570,9 +1716,9 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
if (struct.isSetColumns()) {
{
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()) {
{
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(_iter116.getValue());
+ oprot.writeBinary(_iter121.getKey());
+ oprot.writeBinary(_iter121.getValue());
}
}
}
@@ -1610,12 +1756,22 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
if (struct.isSetCacheBlocks()) {
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
public void read(org.apache.thrift.protocol.TProtocol prot, TScan struct) throws org.apache.thrift.TException {
TTupleProtocol iprot = (TTupleProtocol) prot;
- BitSet incoming = iprot.readBitSet(12);
+ BitSet incoming = iprot.readBitSet(13);
if (incoming.get(0)) {
struct.startRow = iprot.readBinary();
struct.setStartRowIsSet(true);
@@ -1626,14 +1782,14 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
}
if (incoming.get(2)) {
{
- org.apache.thrift.protocol.TList _list117 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
- struct.columns = new ArrayList<TColumn>(_list117.size);
- TColumn _elem118;
- for (int _i119 = 0; _i119 < _list117.size; ++_i119)
+ 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>(_list123.size);
+ TColumn _elem124;
+ for (int _i125 = 0; _i125 < _list123.size; ++_i125)
{
- _elem118 = new TColumn();
- _elem118.read(iprot);
- struct.columns.add(_elem118);
+ _elem124 = new TColumn();
+ _elem124.read(iprot);
+ struct.columns.add(_elem124);
}
}
struct.setColumnsIsSet(true);
@@ -1661,15 +1817,15 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
}
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());
- struct.attributes = new HashMap<ByteBuffer,ByteBuffer>(2*_map120.size);
- ByteBuffer _key121;
- ByteBuffer _val122;
- for (int _i123 = 0; _i123 < _map120.size; ++_i123)
+ 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*_map126.size);
+ ByteBuffer _key127;
+ ByteBuffer _val128;
+ for (int _i129 = 0; _i129 < _map126.size; ++_i129)
{
- _key121 = iprot.readBinary();
- _val122 = iprot.readBinary();
- struct.attributes.put(_key121, _val122);
+ _key127 = iprot.readBinary();
+ _val128 = iprot.readBinary();
+ struct.attributes.put(_key127, _val128);
}
}
struct.setAttributesIsSet(true);
@@ -1687,6 +1843,22 @@ public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, jav
struct.cacheBlocks = iprot.readBool();
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);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/e239e8d2/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
index 96fe4f7..0bd8ece 100644
--- a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
+++ b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
@@ -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.
*/
struct TScan {
@@ -225,6 +225,7 @@ struct TScan {
10: optional TAuthorization authorizations
11: optional bool reversed
12: optional bool cacheBlocks
+ 13: optional map<binary,TTimeRange> colFamTimeRangeMap
}
/**
http://git-wip-us.apache.org/repos/asf/hbase/blob/e239e8d2/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
index db5bdf2..4b202f6 100644
--- a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
+++ b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
@@ -19,6 +19,7 @@
package org.apache.hadoop.hbase.thrift2;
import com.google.common.collect.Lists;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.TRowMutations;
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.thrift.TException;
import org.junit.AfterClass;
@@ -788,6 +790,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
public void testPutTTL() throws Exception {
ThriftHBaseServiceHandler handler = createHandler();
byte[] rowName = "testPutTTL".getBytes();