Super. Thanks Ted.
2014-02-24 9:28 GMT-05:00 Ted Yu <[email protected]>: > 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 > >> >
