[ 
https://issues.apache.org/jira/browse/HBASE-10965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13985161#comment-13985161
 ] 

Ted Yu commented on HBASE-10965:
--------------------------------

Toward the tail of HBASE-11093, Anoop makes a case that as long as the 
following code is present in HRegion, change in HBASE-11093 w.r.t. 
FilterList#filterRow() cannot be applied:
{code}
private boolean filterRow() throws IOException {
  // when hasFilterRow returns true, filter.filterRow() will be called 
automatically inside
  // filterRowCells(List<Cell> kvs) so we skip that scenario here.
  return filter != null && (!filter.hasFilterRow())
          && filter.filterRow();
}
{code}
See 
https://issues.apache.org/jira/browse/HBASE-11093?focusedCommentId=13985149&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13985149

I think goal of this JIRA can be achieved without removing hasFilterRow().
New method for autodetecting presence of hasFilterRow() can be added to 
FilterBase. We can rely on this new method in place where hasFilterRow() is 
currently called in HRegion.
Post 1.0 release, we can remove hasFilterRow().

> Automate detection of presence of Filter#filterRow()
> ----------------------------------------------------
>
>                 Key: HBASE-10965
>                 URL: https://issues.apache.org/jira/browse/HBASE-10965
>             Project: HBase
>          Issue Type: Task
>          Components: Filters
>            Reporter: Ted Yu
>            Assignee: Ted Yu
>         Attachments: 10965-v1.txt, 10965-v2.txt, 10965-v3.txt, 10965-v4.txt
>
>
> There is potential inconsistency between the return value of 
> Filter#hasFilterRow() and presence of Filter#filterRow().
> Filters may override Filter#filterRow() while leaving return value of 
> Filter#hasFilterRow() being false (inherited from FilterBase).
> Downside to purely depending on hasFilterRow() telling us whether custom 
> filter overrides filterRow(List) or filterRow() is that the check below may 
> be rendered ineffective:
> {code}
>           if (nextKv == KV_LIMIT) {
>             if (this.filter != null && filter.hasFilterRow()) {
>               throw new IncompatibleFilterException(
>                 "Filter whose hasFilterRow() returns true is incompatible 
> with scan with limit!");
>             }
> {code}
> When user forgets to override hasFilterRow(), the above check becomes not 
> useful.
> This JIRA aims to remove the inconsistency by automatically detecting the 
> presence of overridden Filter#filterRow(). If filterRow() is implemented and 
> not inherited from FilterBase, it is equivalent to having hasFilterRow() 
> return true.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to