[ https://issues.apache.org/jira/browse/HBASE-10965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13985161#comment-13985161 ]
Ted Yu edited comment on HBASE-10965 at 4/30/14 4:50 AM: --------------------------------------------------------- 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 FilterWrapper. We can rely on this new method in place where hasFilterRow() is currently called in HRegion. Post 1.0 release, we can remove hasFilterRow(). was (Author: yuzhih...@gmail.com): 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)