Index: src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java (revision 1498866) +++ src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java (working copy) @@ -504,6 +504,8 @@ columns.add(column); scan.setColumns(columns); scan.setStartRow("testScan".getBytes()); + // only get the key part + scan.setFilterString(ByteBuffer.wrap(("KeyOnlyFilter()").getBytes())); TColumnValue columnValue = new TColumnValue(ByteBuffer.wrap(familyAname), ByteBuffer.wrap(qualifierAname), ByteBuffer.wrap(valueAname)); @@ -519,6 +521,7 @@ assertEquals(10, results.size()); for (int i = 0; i < 10; i++) { assertArrayEquals(("testScan" + i).getBytes(), results.get(i).getRow()); + assertArrayEquals(("").getBytes(), results.get(i).getColumnValues().get(0).getValue()); } results = handler.getScannerRows(scanId, 10); Index: src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java (working copy) @@ -22,6 +22,7 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.*; +import org.apache.hadoop.hbase.filter.ParseFilter; import org.apache.hadoop.hbase.thrift2.generated.*; import java.io.IOException; @@ -71,6 +72,11 @@ } } + if (in.isSetFilterString()) { + ParseFilter parseFilter = new ParseFilter(); + out.setFilter(parseFilter.parseFilterString(in.getFilterString())); + } + return out; } @@ -322,6 +328,15 @@ out.setTimeRange(timeRange.getMinStamp(), timeRange.getMaxStamp()); } + if (in.isSetBatchSize()) { + out.setBatch(in.getBatchSize()); + } + + if (in.isSetFilterString()) { + ParseFilter parseFilter = new ParseFilter(); + out.setFilter(parseFilter.parseFilterString(in.getFilterString())); + } + return out; } Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java (working copy) @@ -442,7 +442,7 @@ struct.columnValues = new ArrayList(_list0.size); for (int _i1 = 0; _i1 < _list0.size; ++_i1) { - TColumnValue _elem2; // optional + TColumnValue _elem2; // required _elem2 = new TColumnValue(); _elem2.read(iprot); struct.columnValues.add(_elem2); @@ -530,7 +530,7 @@ struct.columnValues = new ArrayList(_list5.size); for (int _i6 = 0; _i6 < _list5.size; ++_i6) { - TColumnValue _elem7; // optional + TColumnValue _elem7; // required _elem7 = new TColumnValue(); _elem7.read(iprot); struct.columnValues.add(_elem7); Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java (working copy) @@ -39,8 +39,6 @@ * * If you specify a time range and a timestamp the range is ignored. * Timestamps on TColumns are ignored. - * - * TODO: Filter, Locks */ public class TGet implements org.apache.thrift.TBase, java.io.Serializable, Cloneable { private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TGet"); @@ -50,6 +48,7 @@ private static final org.apache.thrift.protocol.TField TIMESTAMP_FIELD_DESC = new org.apache.thrift.protocol.TField("timestamp", org.apache.thrift.protocol.TType.I64, (short)3); private static final org.apache.thrift.protocol.TField TIME_RANGE_FIELD_DESC = new org.apache.thrift.protocol.TField("timeRange", org.apache.thrift.protocol.TType.STRUCT, (short)4); private static final org.apache.thrift.protocol.TField MAX_VERSIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("maxVersions", org.apache.thrift.protocol.TType.I32, (short)5); + private static final org.apache.thrift.protocol.TField FILTER_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("filterString", org.apache.thrift.protocol.TType.STRING, (short)6); private static final Map, SchemeFactory> schemes = new HashMap, SchemeFactory>(); static { @@ -62,6 +61,7 @@ public long timestamp; // optional public TTimeRange timeRange; // optional public int maxVersions; // optional + public ByteBuffer filterString; // 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 { @@ -69,7 +69,8 @@ COLUMNS((short)2, "columns"), TIMESTAMP((short)3, "timestamp"), TIME_RANGE((short)4, "timeRange"), - MAX_VERSIONS((short)5, "maxVersions"); + MAX_VERSIONS((short)5, "maxVersions"), + FILTER_STRING((short)6, "filterString"); private static final Map byName = new HashMap(); @@ -94,6 +95,8 @@ return TIME_RANGE; case 5: // MAX_VERSIONS return MAX_VERSIONS; + case 6: // FILTER_STRING + return FILTER_STRING; default: return null; } @@ -137,7 +140,7 @@ private static final int __TIMESTAMP_ISSET_ID = 0; private static final int __MAXVERSIONS_ISSET_ID = 1; private BitSet __isset_bit_vector = new BitSet(2); - private _Fields optionals[] = {_Fields.COLUMNS,_Fields.TIMESTAMP,_Fields.TIME_RANGE,_Fields.MAX_VERSIONS}; + private _Fields optionals[] = {_Fields.COLUMNS,_Fields.TIMESTAMP,_Fields.TIME_RANGE,_Fields.MAX_VERSIONS,_Fields.FILTER_STRING}; 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); @@ -152,6 +155,8 @@ new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTimeRange.class))); tmpMap.put(_Fields.MAX_VERSIONS, new org.apache.thrift.meta_data.FieldMetaData("maxVersions", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32))); + tmpMap.put(_Fields.FILTER_STRING, new org.apache.thrift.meta_data.FieldMetaData("filterString", org.apache.thrift.TFieldRequirementType.OPTIONAL, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING , true))); metaDataMap = Collections.unmodifiableMap(tmpMap); org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TGet.class, metaDataMap); } @@ -188,6 +193,10 @@ this.timeRange = new TTimeRange(other.timeRange); } this.maxVersions = other.maxVersions; + if (other.isSetFilterString()) { + this.filterString = org.apache.thrift.TBaseHelper.copyBinary(other.filterString); +; + } } public TGet deepCopy() { @@ -203,6 +212,7 @@ this.timeRange = null; setMaxVersionsIsSet(false); this.maxVersions = 0; + this.filterString = null; } public byte[] getRow() { @@ -348,6 +358,40 @@ __isset_bit_vector.set(__MAXVERSIONS_ISSET_ID, value); } + public byte[] getFilterString() { + setFilterString(org.apache.thrift.TBaseHelper.rightSize(filterString)); + return filterString == null ? null : filterString.array(); + } + + public ByteBuffer bufferForFilterString() { + return filterString; + } + + public TGet setFilterString(byte[] filterString) { + setFilterString(filterString == null ? (ByteBuffer)null : ByteBuffer.wrap(filterString)); + return this; + } + + public TGet setFilterString(ByteBuffer filterString) { + this.filterString = filterString; + return this; + } + + public void unsetFilterString() { + this.filterString = null; + } + + /** Returns true if field filterString is set (has been assigned a value) and false otherwise */ + public boolean isSetFilterString() { + return this.filterString != null; + } + + public void setFilterStringIsSet(boolean value) { + if (!value) { + this.filterString = null; + } + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case ROW: @@ -390,6 +434,14 @@ } break; + case FILTER_STRING: + if (value == null) { + unsetFilterString(); + } else { + setFilterString((ByteBuffer)value); + } + break; + } } @@ -410,6 +462,9 @@ case MAX_VERSIONS: return Integer.valueOf(getMaxVersions()); + case FILTER_STRING: + return getFilterString(); + } throw new IllegalStateException(); } @@ -431,6 +486,8 @@ return isSetTimeRange(); case MAX_VERSIONS: return isSetMaxVersions(); + case FILTER_STRING: + return isSetFilterString(); } throw new IllegalStateException(); } @@ -493,6 +550,15 @@ return false; } + boolean this_present_filterString = true && this.isSetFilterString(); + boolean that_present_filterString = true && that.isSetFilterString(); + if (this_present_filterString || that_present_filterString) { + if (!(this_present_filterString && that_present_filterString)) + return false; + if (!this.filterString.equals(that.filterString)) + return false; + } + return true; } @@ -559,6 +625,16 @@ return lastComparison; } } + lastComparison = Boolean.valueOf(isSetFilterString()).compareTo(typedOther.isSetFilterString()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetFilterString()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.filterString, typedOther.filterString); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -618,6 +694,16 @@ sb.append(this.maxVersions); first = false; } + if (isSetFilterString()) { + if (!first) sb.append(", "); + sb.append("filterString:"); + if (this.filterString == null) { + sb.append("null"); + } else { + org.apache.thrift.TBaseHelper.toString(this.filterString, sb); + } + first = false; + } sb.append(")"); return sb.toString(); } @@ -680,7 +766,7 @@ struct.columns = new ArrayList(_list8.size); for (int _i9 = 0; _i9 < _list8.size; ++_i9) { - TColumn _elem10; // optional + TColumn _elem10; // required _elem10 = new TColumn(); _elem10.read(iprot); struct.columns.add(_elem10); @@ -717,6 +803,14 @@ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } break; + case 6: // FILTER_STRING + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.filterString = iprot.readBinary(); + struct.setFilterStringIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } @@ -768,6 +862,13 @@ oprot.writeI32(struct.maxVersions); oprot.writeFieldEnd(); } + if (struct.filterString != null) { + if (struct.isSetFilterString()) { + oprot.writeFieldBegin(FILTER_STRING_FIELD_DESC); + oprot.writeBinary(struct.filterString); + oprot.writeFieldEnd(); + } + } oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -799,7 +900,10 @@ if (struct.isSetMaxVersions()) { optionals.set(3); } - oprot.writeBitSet(optionals, 4); + if (struct.isSetFilterString()) { + optionals.set(4); + } + oprot.writeBitSet(optionals, 5); if (struct.isSetColumns()) { { oprot.writeI32(struct.columns.size()); @@ -818,6 +922,9 @@ if (struct.isSetMaxVersions()) { oprot.writeI32(struct.maxVersions); } + if (struct.isSetFilterString()) { + oprot.writeBinary(struct.filterString); + } } @Override @@ -825,14 +932,14 @@ TTupleProtocol iprot = (TTupleProtocol) prot; struct.row = iprot.readBinary(); struct.setRowIsSet(true); - BitSet incoming = iprot.readBitSet(4); + BitSet incoming = iprot.readBitSet(5); if (incoming.get(0)) { { org.apache.thrift.protocol.TList _list13 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32()); struct.columns = new ArrayList(_list13.size); for (int _i14 = 0; _i14 < _list13.size; ++_i14) { - TColumn _elem15; // optional + TColumn _elem15; // required _elem15 = new TColumn(); _elem15.read(iprot); struct.columns.add(_elem15); @@ -853,6 +960,10 @@ struct.maxVersions = iprot.readI32(); struct.setMaxVersionsIsSet(true); } + if (incoming.get(4)) { + struct.filterString = iprot.readBinary(); + struct.setFilterStringIsSet(true); + } } } Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java (working copy) @@ -709,7 +709,7 @@ struct.columns = new ArrayList(_list24.size); for (int _i25 = 0; _i25 < _list24.size; ++_i25) { - TColumn _elem26; // optional + TColumn _elem26; // required _elem26 = new TColumn(); _elem26.read(iprot); struct.columns.add(_elem26); @@ -860,7 +860,7 @@ struct.columns = new ArrayList(_list29.size); for (int _i30 = 0; _i30 < _list29.size; ++_i30) { - TColumn _elem31; // optional + TColumn _elem31; // required _elem31 = new TColumn(); _elem31.read(iprot); struct.columns.add(_elem31); Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java (working copy) @@ -2207,6 +2207,8 @@ 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_bit_vector = new BitSet(1); 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); @@ -3704,7 +3706,7 @@ struct.gets = new ArrayList(_list48.size); for (int _i49 = 0; _i49 < _list48.size; ++_i49) { - TGet _elem50; // optional + TGet _elem50; // required _elem50 = new TGet(); _elem50.read(iprot); struct.gets.add(_elem50); @@ -3785,7 +3787,7 @@ struct.gets = new ArrayList(_list53.size); for (int _i54 = 0; _i54 < _list53.size; ++_i54) { - TGet _elem55; // optional + TGet _elem55; // required _elem55 = new TGet(); _elem55.read(iprot); struct.gets.add(_elem55); @@ -4186,7 +4188,7 @@ struct.success = new ArrayList(_list56.size); for (int _i57 = 0; _i57 < _list56.size; ++_i57) { - TResult _elem58; // optional + TResult _elem58; // required _elem58 = new TResult(); _elem58.read(iprot); struct.success.add(_elem58); @@ -4288,7 +4290,7 @@ struct.success = new ArrayList(_list61.size); for (int _i62 = 0; _i62 < _list61.size; ++_i62) { - TResult _elem63; // optional + TResult _elem63; // required _elem63 = new TResult(); _elem63.read(iprot); struct.success.add(_elem63); @@ -6447,6 +6449,8 @@ 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_bit_vector = new BitSet(1); 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); @@ -7000,7 +7004,7 @@ struct.puts = new ArrayList(_list64.size); for (int _i65 = 0; _i65 < _list64.size; ++_i65) { - TPut _elem66; // optional + TPut _elem66; // required _elem66 = new TPut(); _elem66.read(iprot); struct.puts.add(_elem66); @@ -7081,7 +7085,7 @@ struct.puts = new ArrayList(_list69.size); for (int _i70 = 0; _i70 < _list69.size; ++_i70) { - TPut _elem71; // optional + TPut _elem71; // required _elem71 = new TPut(); _elem71.read(iprot); struct.puts.add(_elem71); @@ -8720,7 +8724,7 @@ struct.deletes = new ArrayList(_list72.size); for (int _i73 = 0; _i73 < _list72.size; ++_i73) { - TDelete _elem74; // optional + TDelete _elem74; // required _elem74 = new TDelete(); _elem74.read(iprot); struct.deletes.add(_elem74); @@ -8801,7 +8805,7 @@ struct.deletes = new ArrayList(_list77.size); for (int _i78 = 0; _i78 < _list77.size; ++_i78) { - TDelete _elem79; // optional + TDelete _elem79; // required _elem79 = new TDelete(); _elem79.read(iprot); struct.deletes.add(_elem79); @@ -9202,7 +9206,7 @@ struct.success = new ArrayList(_list80.size); for (int _i81 = 0; _i81 < _list80.size; ++_i81) { - TDelete _elem82; // optional + TDelete _elem82; // required _elem82 = new TDelete(); _elem82.read(iprot); struct.success.add(_elem82); @@ -9304,7 +9308,7 @@ struct.success = new ArrayList(_list85.size); for (int _i86 = 0; _i86 < _list85.size; ++_i86) { - TDelete _elem87; // optional + TDelete _elem87; // required _elem87 = new TDelete(); _elem87.read(iprot); struct.success.add(_elem87); @@ -10629,6 +10633,8 @@ 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_bit_vector = new BitSet(1); 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); @@ -12496,6 +12502,8 @@ 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_bit_vector = new BitSet(1); 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); @@ -13558,7 +13566,7 @@ struct.success = new ArrayList(_list88.size); for (int _i89 = 0; _i89 < _list88.size; ++_i89) { - TResult _elem90; // optional + TResult _elem90; // required _elem90 = new TResult(); _elem90.read(iprot); struct.success.add(_elem90); @@ -13680,7 +13688,7 @@ struct.success = new ArrayList(_list93.size); for (int _i94 = 0; _i94 < _list93.size; ++_i94) { - TResult _elem95; // optional + TResult _elem95; // required _elem95 = new TResult(); _elem95.read(iprot); struct.success.add(_elem95); Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java (working copy) @@ -527,7 +527,7 @@ struct.columns = new ArrayList(_list32.size); for (int _i33 = 0; _i33 < _list32.size; ++_i33) { - TColumnIncrement _elem34; // optional + TColumnIncrement _elem34; // required _elem34 = new TColumnIncrement(); _elem34.read(iprot); struct.columns.add(_elem34); @@ -629,7 +629,7 @@ struct.columns = new ArrayList(_list37.size); for (int _i38 = 0; _i38 < _list37.size; ++_i38) { - TColumnIncrement _elem39; // optional + TColumnIncrement _elem39; // required _elem39 = new TColumnIncrement(); _elem39.read(iprot); struct.columns.add(_elem39); Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java (working copy) @@ -40,6 +40,8 @@ private static final org.apache.thrift.protocol.TField CACHING_FIELD_DESC = new org.apache.thrift.protocol.TField("caching", org.apache.thrift.protocol.TType.I32, (short)4); private static final org.apache.thrift.protocol.TField MAX_VERSIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("maxVersions", org.apache.thrift.protocol.TType.I32, (short)5); private static final org.apache.thrift.protocol.TField TIME_RANGE_FIELD_DESC = new org.apache.thrift.protocol.TField("timeRange", org.apache.thrift.protocol.TType.STRUCT, (short)6); + private static final org.apache.thrift.protocol.TField FILTER_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("filterString", org.apache.thrift.protocol.TType.STRING, (short)7); + private static final org.apache.thrift.protocol.TField BATCH_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("batchSize", org.apache.thrift.protocol.TType.I32, (short)8); private static final Map, SchemeFactory> schemes = new HashMap, SchemeFactory>(); static { @@ -53,6 +55,8 @@ public int caching; // optional public int maxVersions; // optional public TTimeRange timeRange; // optional + public ByteBuffer filterString; // optional + public int batchSize; // 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 { @@ -61,7 +65,9 @@ COLUMNS((short)3, "columns"), CACHING((short)4, "caching"), MAX_VERSIONS((short)5, "maxVersions"), - TIME_RANGE((short)6, "timeRange"); + TIME_RANGE((short)6, "timeRange"), + FILTER_STRING((short)7, "filterString"), + BATCH_SIZE((short)8, "batchSize"); private static final Map byName = new HashMap(); @@ -88,6 +94,10 @@ return MAX_VERSIONS; case 6: // TIME_RANGE return TIME_RANGE; + case 7: // FILTER_STRING + return FILTER_STRING; + case 8: // BATCH_SIZE + return BATCH_SIZE; default: return null; } @@ -130,8 +140,9 @@ // isset id assignments private static final int __CACHING_ISSET_ID = 0; private static final int __MAXVERSIONS_ISSET_ID = 1; - private BitSet __isset_bit_vector = new BitSet(2); - private _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.COLUMNS,_Fields.CACHING,_Fields.MAX_VERSIONS,_Fields.TIME_RANGE}; + private static final int __BATCHSIZE_ISSET_ID = 2; + private BitSet __isset_bit_vector = new BitSet(3); + private _Fields optionals[] = {_Fields.START_ROW,_Fields.STOP_ROW,_Fields.COLUMNS,_Fields.CACHING,_Fields.MAX_VERSIONS,_Fields.TIME_RANGE,_Fields.FILTER_STRING,_Fields.BATCH_SIZE}; 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); @@ -148,6 +159,10 @@ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32))); tmpMap.put(_Fields.TIME_RANGE, new org.apache.thrift.meta_data.FieldMetaData("timeRange", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTimeRange.class))); + tmpMap.put(_Fields.FILTER_STRING, new org.apache.thrift.meta_data.FieldMetaData("filterString", org.apache.thrift.TFieldRequirementType.OPTIONAL, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING , true))); + tmpMap.put(_Fields.BATCH_SIZE, new org.apache.thrift.meta_data.FieldMetaData("batchSize", org.apache.thrift.TFieldRequirementType.OPTIONAL, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32))); metaDataMap = Collections.unmodifiableMap(tmpMap); org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TScan.class, metaDataMap); } @@ -183,6 +198,11 @@ if (other.isSetTimeRange()) { this.timeRange = new TTimeRange(other.timeRange); } + if (other.isSetFilterString()) { + this.filterString = org.apache.thrift.TBaseHelper.copyBinary(other.filterString); +; + } + this.batchSize = other.batchSize; } public TScan deepCopy() { @@ -199,6 +219,9 @@ this.maxVersions = 1; this.timeRange = null; + this.filterString = null; + setBatchSizeIsSet(false); + this.batchSize = 0; } public byte[] getStartRow() { @@ -378,6 +401,63 @@ } } + public byte[] getFilterString() { + setFilterString(org.apache.thrift.TBaseHelper.rightSize(filterString)); + return filterString == null ? null : filterString.array(); + } + + public ByteBuffer bufferForFilterString() { + return filterString; + } + + public TScan setFilterString(byte[] filterString) { + setFilterString(filterString == null ? (ByteBuffer)null : ByteBuffer.wrap(filterString)); + return this; + } + + public TScan setFilterString(ByteBuffer filterString) { + this.filterString = filterString; + return this; + } + + public void unsetFilterString() { + this.filterString = null; + } + + /** Returns true if field filterString is set (has been assigned a value) and false otherwise */ + public boolean isSetFilterString() { + return this.filterString != null; + } + + public void setFilterStringIsSet(boolean value) { + if (!value) { + this.filterString = null; + } + } + + public int getBatchSize() { + return this.batchSize; + } + + public TScan setBatchSize(int batchSize) { + this.batchSize = batchSize; + setBatchSizeIsSet(true); + return this; + } + + public void unsetBatchSize() { + __isset_bit_vector.clear(__BATCHSIZE_ISSET_ID); + } + + /** Returns true if field batchSize is set (has been assigned a value) and false otherwise */ + public boolean isSetBatchSize() { + return __isset_bit_vector.get(__BATCHSIZE_ISSET_ID); + } + + public void setBatchSizeIsSet(boolean value) { + __isset_bit_vector.set(__BATCHSIZE_ISSET_ID, value); + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case START_ROW: @@ -428,6 +508,22 @@ } break; + case FILTER_STRING: + if (value == null) { + unsetFilterString(); + } else { + setFilterString((ByteBuffer)value); + } + break; + + case BATCH_SIZE: + if (value == null) { + unsetBatchSize(); + } else { + setBatchSize((Integer)value); + } + break; + } } @@ -451,6 +547,12 @@ case TIME_RANGE: return getTimeRange(); + case FILTER_STRING: + return getFilterString(); + + case BATCH_SIZE: + return Integer.valueOf(getBatchSize()); + } throw new IllegalStateException(); } @@ -474,6 +576,10 @@ return isSetMaxVersions(); case TIME_RANGE: return isSetTimeRange(); + case FILTER_STRING: + return isSetFilterString(); + case BATCH_SIZE: + return isSetBatchSize(); } throw new IllegalStateException(); } @@ -545,6 +651,24 @@ return false; } + boolean this_present_filterString = true && this.isSetFilterString(); + boolean that_present_filterString = true && that.isSetFilterString(); + if (this_present_filterString || that_present_filterString) { + if (!(this_present_filterString && that_present_filterString)) + return false; + if (!this.filterString.equals(that.filterString)) + return false; + } + + boolean this_present_batchSize = true && this.isSetBatchSize(); + boolean that_present_batchSize = true && that.isSetBatchSize(); + if (this_present_batchSize || that_present_batchSize) { + if (!(this_present_batchSize && that_present_batchSize)) + return false; + if (this.batchSize != that.batchSize) + return false; + } + return true; } @@ -621,6 +745,26 @@ return lastComparison; } } + lastComparison = Boolean.valueOf(isSetFilterString()).compareTo(typedOther.isSetFilterString()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetFilterString()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.filterString, typedOther.filterString); + if (lastComparison != 0) { + return lastComparison; + } + } + lastComparison = Boolean.valueOf(isSetBatchSize()).compareTo(typedOther.isSetBatchSize()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetBatchSize()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.batchSize, typedOther.batchSize); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -692,6 +836,22 @@ } first = false; } + if (isSetFilterString()) { + if (!first) sb.append(", "); + sb.append("filterString:"); + if (this.filterString == null) { + sb.append("null"); + } else { + org.apache.thrift.TBaseHelper.toString(this.filterString, sb); + } + first = false; + } + if (isSetBatchSize()) { + if (!first) sb.append(", "); + sb.append("batchSize:"); + sb.append(this.batchSize); + first = false; + } sb.append(")"); return sb.toString(); } @@ -759,7 +919,7 @@ struct.columns = new ArrayList(_list40.size); for (int _i41 = 0; _i41 < _list40.size; ++_i41) { - TColumn _elem42; // optional + TColumn _elem42; // required _elem42 = new TColumn(); _elem42.read(iprot); struct.columns.add(_elem42); @@ -796,6 +956,22 @@ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } break; + case 7: // FILTER_STRING + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.filterString = iprot.readBinary(); + struct.setFilterStringIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + case 8: // BATCH_SIZE + if (schemeField.type == org.apache.thrift.protocol.TType.I32) { + struct.batchSize = iprot.readI32(); + struct.setBatchSizeIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } @@ -856,6 +1032,18 @@ oprot.writeFieldEnd(); } } + if (struct.filterString != null) { + if (struct.isSetFilterString()) { + oprot.writeFieldBegin(FILTER_STRING_FIELD_DESC); + oprot.writeBinary(struct.filterString); + oprot.writeFieldEnd(); + } + } + if (struct.isSetBatchSize()) { + oprot.writeFieldBegin(BATCH_SIZE_FIELD_DESC); + oprot.writeI32(struct.batchSize); + oprot.writeFieldEnd(); + } oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -892,7 +1080,13 @@ if (struct.isSetTimeRange()) { optionals.set(5); } - oprot.writeBitSet(optionals, 6); + if (struct.isSetFilterString()) { + optionals.set(6); + } + if (struct.isSetBatchSize()) { + optionals.set(7); + } + oprot.writeBitSet(optionals, 8); if (struct.isSetStartRow()) { oprot.writeBinary(struct.startRow); } @@ -917,12 +1111,18 @@ if (struct.isSetTimeRange()) { struct.timeRange.write(oprot); } + if (struct.isSetFilterString()) { + oprot.writeBinary(struct.filterString); + } + if (struct.isSetBatchSize()) { + oprot.writeI32(struct.batchSize); + } } @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(6); + BitSet incoming = iprot.readBitSet(8); if (incoming.get(0)) { struct.startRow = iprot.readBinary(); struct.setStartRowIsSet(true); @@ -937,7 +1137,7 @@ struct.columns = new ArrayList(_list45.size); for (int _i46 = 0; _i46 < _list45.size; ++_i46) { - TColumn _elem47; // optional + TColumn _elem47; // required _elem47 = new TColumn(); _elem47.read(iprot); struct.columns.add(_elem47); @@ -958,6 +1158,14 @@ struct.timeRange.read(iprot); struct.setTimeRangeIsSet(true); } + if (incoming.get(6)) { + struct.filterString = iprot.readBinary(); + struct.setFilterStringIsSet(true); + } + if (incoming.get(7)) { + struct.batchSize = iprot.readI32(); + struct.setBatchSizeIsSet(true); + } } } Index: src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java (revision 1498866) +++ src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java (working copy) @@ -604,7 +604,7 @@ struct.columnValues = new ArrayList(_list16.size); for (int _i17 = 0; _i17 < _list16.size; ++_i17) { - TColumnValue _elem18; // optional + TColumnValue _elem18; // required _elem18 = new TColumnValue(); _elem18.read(iprot); struct.columnValues.add(_elem18); @@ -725,7 +725,7 @@ struct.columnValues = new ArrayList(_list21.size); for (int _i22 = 0; _i22 < _list21.size; ++_i22) { - TColumnValue _elem23; // optional + TColumnValue _elem23; // required _elem23 = new TColumnValue(); _elem23.read(iprot); struct.columnValues.add(_elem23); Index: src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift =================================================================== --- src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift (revision 1498866) +++ src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift (working copy) @@ -89,8 +89,6 @@ * * If you specify a time range and a timestamp the range is ignored. * Timestamps on TColumns are ignored. - * - * TODO: Filter, Locks */ struct TGet { 1: required binary row, @@ -100,6 +98,7 @@ 4: optional TTimeRange timeRange, 5: optional i32 maxVersions, + 6: optional binary filterString } /** @@ -174,6 +173,8 @@ 4: optional i32 caching, 5: optional i32 maxVersions=1, 6: optional TTimeRange timeRange, + 7: optional binary filterString, + 8: optional i32 batchSize } //