You want transform to only be called on filters that are "reached"? I.e. FilterA and FilterB, FilterB.transform should not be called if a KV is already filtered by FilterA?
That's not how it works right now, transform is called in a completely different code path from the actual filtering logic. -- Lars ----- Original Message ----- From: Christophe Taton <[email protected]> To: [email protected] Cc: Sent: Sunday, June 30, 2013 10:26 PM Subject: Re: Behavior of Filter.transform() in FilterList? On Sun, Jun 30, 2013 at 10:15 PM, Ted Yu <[email protected]> wrote: > The clause 'family=X and column=Y and KeyOnlyFilter' would be represented > by a FilterList, right ? > (family=A and colymn=B) would be represented by another FilterList. > Yes, that would be FilterList(OR, [FilterList(AND, [family=X, column=Y, KeyOnlyFilter]), FilterList(AND, [family=A, column=B])]). So the behavior is expected. > Could you explain, I'm not sure how you reach this conclusion. Are you saying it is expected, given the actual implementation FilterList.transform()? Or are there some other details I missed? Thanks! C. On Mon, Jul 1, 2013 at 1:10 PM, Christophe Taton <[email protected]> wrote: > > > Hi, > > > > From > > > > > https://github.com/apache/hbase/blob/0.95/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java#L183 > > , > > it appears that Filter.transform() is invoked unconditionally on all > > filters in a FilterList hierarchy. > > > > This is quite confusing, especially since I may construct a filter like: > > (family=X and column=Y and KeyOnlyFilter) or (family=A and colymn=B) > > The KeyOnlyFilter will remove all values from the KeyValues in A:B as > well. > > > > Is my understanding correct? Is this an expected/intended behavior? > > > > Thanks, > > C. > > >
