hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Marc Spaggiari <jean-m...@spaggiari.org>
Subject Re: Trouble writing custom filter for use in FilterList
Date Mon, 24 Feb 2014 14:25:05 GMT
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 <yuzhihong@gmail.com>:

> 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 <Niels@basjes.nl> 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 <Niels@basjes.nl> 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
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message