hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ted Yu (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-10965) Automate detection of presence of Filter#filterRow()
Date Thu, 01 May 2014 22:47:16 GMT

     [ https://issues.apache.org/jira/browse/HBASE-10965?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Ted Yu updated HBASE-10965:
---------------------------

    Description: 
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.

  was:
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.


> 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.
> 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)

Mime
View raw message