You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Federico Gaule (JIRA)" <ji...@apache.org> on 2013/07/11 23:29:48 UTC
[jira] [Updated] (HBASE-8930) Filter evaluates KVs outside
requested columns
[ https://issues.apache.org/jira/browse/HBASE-8930?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Federico Gaule updated HBASE-8930:
----------------------------------
Description:
1- Fill row with some columns
2- Get row with some columns less than universe - Use filter to print kvs
3- Filter prints not requested columns
<code>
public class ExtraColumnTest {
@Test
public void testFilter() throws Exception {
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "fgaule-despegar");
HTable hTable = new HTable(config, "availability");
byte[] cf = new AvailabilityColumnFamilyConverter().objectToByteArray(new AvailabilityColumnFamily('H',
AvailabilityColumnFamilyType.SEARCH));
AvailabilityRowKey availabilityRowKey = AvailabilityRowKeyBuilder.create().setCityOID(6846).setContractOID(15642)
.setHotelOID(351802).setRoomTypeOID(41048).build();
byte[] row = new AvailabilityRowKeyByteConverter().objectToByteArray(availabilityRowKey);
byte[] col1 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col2 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col3 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 560,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col4 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 561,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col5 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 562,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col6 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 563,
AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
byte[] col1g = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
AvailabilityQualifierType.GUARANTEE_ALLOTMENT));
byte[] col2g = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
AvailabilityQualifierType.GUARANTEE_ALLOTMENT));
byte[] col1v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
byte[] col2v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
byte[] col3v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 560,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
byte[] col4v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 561,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
byte[] col5v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 562,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
byte[] col6v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 563,
AvailabilityQualifierType.VARIABLE_ALLOTMENT));
new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
AvailabilityQualifierType.MINIMUM_RELEASE_DAYS));
Put put = new Put(row);
put.add(cf, col1, Bytes.toBytes((short) 1));
put.add(cf, col2, Bytes.toBytes((short) 1));
put.add(cf, col3, Bytes.toBytes((short) 3));
put.add(cf, col4, Bytes.toBytes((short) 3));
put.add(cf, col5, Bytes.toBytes((short) 3));
put.add(cf, col6, Bytes.toBytes((short) 3));
hTable.put(put);
put = new Put(row);
put.add(cf, col1v, Bytes.toBytes((short) 10));
put.add(cf, col2v, Bytes.toBytes((short) 10));
put.add(cf, col3v, Bytes.toBytes((short) 10));
put.add(cf, col4v, Bytes.toBytes((short) 10));
put.add(cf, col5v, Bytes.toBytes((short) 10));
put.add(cf, col6v, Bytes.toBytes((short) 10));
hTable.put(put);
hTable.flushCommits();
Filter releaseDayAvailabilityFilter = new AllwaysNextColFilter();
Get get = new Get(row);
get.addColumn(cf, col1);
get.addColumn(cf, col2);
get.addColumn(cf, col1v);
get.addColumn(cf, col2v);
get.addColumn(cf, col1g);
get.addColumn(cf, col2g);
get.setFilter(releaseDayAvailabilityFilter);
get.setMaxVersions(1);
System.out.println(get);
Scan scan = new Scan(get);
ResultScanner scanner = hTable.getScanner(scan);
Iterator<Result> iterator = scanner.iterator();
System.out.println("SCAN");
while (iterator.hasNext()) {
Result next = iterator.next();
for (KeyValue kv : next.list()) {
System.out.println(new AvailabilityQualifierConverter().byteArrayToObject(kv.getQualifier()));
}
}
}
}
</code>
> Filter evaluates KVs outside requested columns
> ----------------------------------------------
>
> Key: HBASE-8930
> URL: https://issues.apache.org/jira/browse/HBASE-8930
> Project: HBase
> Issue Type: Bug
> Components: Filters
> Affects Versions: 0.94.7
> Reporter: Federico Gaule
> Priority: Critical
>
> 1- Fill row with some columns
> 2- Get row with some columns less than universe - Use filter to print kvs
> 3- Filter prints not requested columns
> <code>
> public class ExtraColumnTest {
> @Test
> public void testFilter() throws Exception {
> Configuration config = HBaseConfiguration.create();
> config.set("hbase.zookeeper.quorum", "fgaule-despegar");
> HTable hTable = new HTable(config, "availability");
> byte[] cf = new AvailabilityColumnFamilyConverter().objectToByteArray(new AvailabilityColumnFamily('H',
> AvailabilityColumnFamilyType.SEARCH));
> AvailabilityRowKey availabilityRowKey = AvailabilityRowKeyBuilder.create().setCityOID(6846).setContractOID(15642)
> .setHotelOID(351802).setRoomTypeOID(41048).build();
> byte[] row = new AvailabilityRowKeyByteConverter().objectToByteArray(availabilityRowKey);
> byte[] col1 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col2 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col3 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 560,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col4 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 561,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col5 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 562,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col6 = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 563,
> AvailabilityQualifierType.MINIMUM_RESERVATION_DAYS));
> byte[] col1g = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
> AvailabilityQualifierType.GUARANTEE_ALLOTMENT));
> byte[] col2g = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
> AvailabilityQualifierType.GUARANTEE_ALLOTMENT));
> byte[] col1v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> byte[] col2v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 559,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> byte[] col3v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 560,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> byte[] col4v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 561,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> byte[] col5v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 562,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> byte[] col6v = new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 563,
> AvailabilityQualifierType.VARIABLE_ALLOTMENT));
> new AvailabilityQualifierConverter().objectToByteArray(new AvailabilityQualifier((short) 558,
> AvailabilityQualifierType.MINIMUM_RELEASE_DAYS));
> Put put = new Put(row);
> put.add(cf, col1, Bytes.toBytes((short) 1));
> put.add(cf, col2, Bytes.toBytes((short) 1));
> put.add(cf, col3, Bytes.toBytes((short) 3));
> put.add(cf, col4, Bytes.toBytes((short) 3));
> put.add(cf, col5, Bytes.toBytes((short) 3));
> put.add(cf, col6, Bytes.toBytes((short) 3));
> hTable.put(put);
> put = new Put(row);
> put.add(cf, col1v, Bytes.toBytes((short) 10));
> put.add(cf, col2v, Bytes.toBytes((short) 10));
> put.add(cf, col3v, Bytes.toBytes((short) 10));
> put.add(cf, col4v, Bytes.toBytes((short) 10));
> put.add(cf, col5v, Bytes.toBytes((short) 10));
> put.add(cf, col6v, Bytes.toBytes((short) 10));
> hTable.put(put);
> hTable.flushCommits();
> Filter releaseDayAvailabilityFilter = new AllwaysNextColFilter();
> Get get = new Get(row);
> get.addColumn(cf, col1);
> get.addColumn(cf, col2);
> get.addColumn(cf, col1v);
> get.addColumn(cf, col2v);
> get.addColumn(cf, col1g);
> get.addColumn(cf, col2g);
> get.setFilter(releaseDayAvailabilityFilter);
> get.setMaxVersions(1);
> System.out.println(get);
> Scan scan = new Scan(get);
> ResultScanner scanner = hTable.getScanner(scan);
> Iterator<Result> iterator = scanner.iterator();
> System.out.println("SCAN");
> while (iterator.hasNext()) {
> Result next = iterator.next();
> for (KeyValue kv : next.list()) {
> System.out.println(new AvailabilityQualifierConverter().byteArrayToObject(kv.getQualifier()));
> }
> }
> }
> }
> </code>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira