Niels' test is an end to end test. The issue is covered by a new test in TestFilterList.
Cheers On Feb 24, 2014, at 6:25 AM, Jean-Marc Spaggiari <[email protected]> wrote: > Hi Ted, > > Any reason why this was not failing of Jenkins too? Can we add > https://github.com/nielsbasjes/HBase-filter-problem/ to the test suite? > > JM > > > 2014-02-19 6:51 GMT-05:00 Ted Yu <[email protected]>: > >> Hi, Niels: >> This issue has been fixed in HBASE-10485 and would be included in the >> upcoming 0.94.17 release. >> >> Cheers >> >> On Feb 3, 2014, at 7:56 AM, Niels Basjes <[email protected]> wrote: >> >>> Additional info: >>> If I replace the NEXT_COL in the filter into either SKIP or NEXT_ROW the >>> result remains the same. >>> >>> >>> On Mon, Feb 3, 2014 at 2:27 PM, Niels Basjes <[email protected]> wrote: >>> >>>> Hi, >>>> >>>> I'm trying to write a custom filter that is to be used (in my use case) >> in >>>> a FilterList. >>>> Because I ran into something I do not understand I reduced the code to >> the >>>> absolute minimal and posted it here: >>>> https://github.com/nielsbasjes/HBase-filter-problem >>>> >>>> What I now have (just to show my problem) is a filter (classname >>>> = AlwaysNextColFilter) that only implements >>>> >>>> @Override >>>> public ReturnCode filterKeyValue(KeyValue v) { >>>> return ReturnCode.NEXT_COL; >>>> } >>>> >>>> >>>> The expected behavior is that this filter should indicate to everything >>>> that is offered that it should be filtered out. >>>> >>>> I then: >>>> utility = new HBaseTestingUtility(); >>>> utility.startMiniCluster(); >>>> >>>> and I put some rows in there. >>>> >>>> Put put = new Put("Row AA".getBytes()); >>>> put.add(colFamBytes, "Col A".getBytes(), "Foo".getBytes()); >>>> table.put(put); >>>> >>>> put = new Put("Row BB".getBytes()); >>>> put.add(colFamBytes, "Col B".getBytes(), "FooFoo".getBytes()); >>>> table.put(put); >>>> >>>> put = new Put("Row CC".getBytes()); >>>> put.add(colFamBytes, "Col C".getBytes(), "Bar".getBytes()); >>>> table.put(put); >>>> >>>> put = new Put("Row DD".getBytes()); >>>> put.add(colFamBytes, "Col D".getBytes(), "BarBar".getBytes()); >>>> table.put(put); >>>> >>>> Now I create a scan (to scan the entire table ... of 4 rows) and I set >> the >>>> filters. >>>> >>>> 1) With this I get an empty result set. * (= Good/As I expect it)* >>>> s.setFilter(new *AlwaysNextColFilter()*); >>>> >>>> 2) With this I get an empty result set. * (= Good/As I expect it)* >>>> FilterList flist = new >>>> FilterList(FilterList.Operator.MUST_PASS_ONE); >>>> flist.addFilter(new *AlwaysNextColFilter()*); >>>> s.setFilter(flist); >>>> >>>> 3) With this I get only the rows starting with "Row B". * (= Good/As I >>>> expect it)* >>>> FilterList flist = new >>>> FilterList(FilterList.Operator.MUST_PASS_ONE); >>>> flist.addFilter(new *PrefixFilter("Row B".getBytes())*); >>>> s.setFilter(flist); >>>> >>>> 4) With this I get only the rows starting with "Row A" and "Row B". *(= >>>> NOT as I expect it)* >>>> FilterList flist = new >>>> FilterList(FilterList.Operator.MUST_PASS_ONE); >>>> flist.addFilter(new *AlwaysNextColFilter()*); >>>> flist.addFilter(new *PrefixFilter("Row B".getBytes())*); >>>> s.setFilter(flist); >>>> >>>> In 4) I expected to get ONLY the rows starting with "Row B" because >> these >>>> are the only ones that "PASS" at least one of the provided filters. >>>> >>>> Did I misunderstand the way this should work ... or is this bug ( in >>>> FilterList? )? >>>> >>>> -- >>>> Best regards / Met vriendelijke groeten, >>>> >>>> Niels Basjes >>> >>> >>> >>> -- >>> Best regards / Met vriendelijke groeten, >>> >>> Niels Basjes >>
