[ 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