[ https://issues.apache.org/jira/browse/HBASE-10965?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ted Yu updated HBASE-10965: --------------------------- Attachment: 10965-v6.txt Patch v6 distinguishes the user filters which directly override Filter class from those which extend FilterBase. FilterUtil class is added which contain two helper methods. All \*Filter\* tests pass. > 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, > 10965-v5.txt, 10965-v6.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. > Another limitation is that we cannot optimize FilterList#filterRow() through > short circuit when FilterList#hasFilterRow() turns false. > See > https://issues.apache.org/jira/browse/HBASE-11093?focusedCommentId=13985149&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13985149 > 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)