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
