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

Daniel Roudnitsky updated HBASE-29672:
--------------------------------------
    Description: 
There is a large class of filters:
{code:java}
RowFilter
ValueFilter
QualifierFilter
FamilyFilter
DependentColumnFilter
ColumnValueFilter
SingleColumnValueFilter
SingleColumnValueExcludeFilter
{code}
Which take a ByteArrayComparable comparator as an argument (e.g 
BinaryComparator, RegexStringComparator, BinaryComponentComparator) and apply 
the given comparator at query runtime on the server. Due to filter 
misconfiguration/data shape/comparator bugs, a comparator may throw a runtime 
exception which filters are not currently handling. In this case the runtime 
exception gets propagated all the way up the call stack, leading to an 
unexpected throwable at the topmost RpcServer layer and an unclear remote 
exception on the client with a long mysterious server exception trace (the call 
stack includes everything from the topmost RpcServer layer all the way down to 
the comparator layer, see HBASE-29678 for an example). 

+Proposal+
We should handle comparison runtime exceptions at the filter layer and treat 
them as HBaseIOException, and propagate a clear exception message and stack 
trace to the client. This is beneficial for any type of runtime exception that 
can occur in a comparator, and will also lets us handle cases where we know 
that a client retry is guaranteed to fail and let us prevent bad requests from 
being excessively retried (such as HBASE-29654 , HBASE-29678).

  was:
There is a large class of filters:
{code:java}
RowFilter
ValueFilter
QualifierFilter
FamilyFilter
DependentColumnFilter
ColumnValueFilter
SingleColumnValueFilter
SingleColumnValueExcludeFilter
{code}
Which take a ByteArrayComparable comparator as an argument (e.g 
BinaryComparator, RegexStringComparator, BinaryComponentComparator) and apply 
the given comparator at query runtime on the server. Due to filter 
misconfiguration/data shape/comparator bugs, a comparator may throw a runtime 
exception which filters are not currently handling. In this case the runtime 
exception gets propagated all the way up the call stack, leading to an 
unexpected throwable at the topmost RpcServer layer and a very unclear remote 
exception on the client with a very long mysterious server exception trace.

+Proposal+
We should handle comparison runtime exceptions at the filter layer and treat 
them as HBaseIOException, and propagate a clear exception message and stack 
trace to the client. This is beneficial for any type of runtime exception that 
can occur in a comparator, and will also lets us handle cases where we know 
that a client retry is guaranteed to fail and let us prevent bad requests from 
being excessively retried (such as HBASE-29654 , HBASE-29678).


> Handle runtime comparison failures during filtering gracefully
> --------------------------------------------------------------
>
>                 Key: HBASE-29672
>                 URL: https://issues.apache.org/jira/browse/HBASE-29672
>             Project: HBase
>          Issue Type: Improvement
>          Components: Filters
>            Reporter: Daniel Roudnitsky
>            Assignee: Daniel Roudnitsky
>            Priority: Major
>              Labels: pull-request-available
>
> There is a large class of filters:
> {code:java}
> RowFilter
> ValueFilter
> QualifierFilter
> FamilyFilter
> DependentColumnFilter
> ColumnValueFilter
> SingleColumnValueFilter
> SingleColumnValueExcludeFilter
> {code}
> Which take a ByteArrayComparable comparator as an argument (e.g 
> BinaryComparator, RegexStringComparator, BinaryComponentComparator) and apply 
> the given comparator at query runtime on the server. Due to filter 
> misconfiguration/data shape/comparator bugs, a comparator may throw a runtime 
> exception which filters are not currently handling. In this case the runtime 
> exception gets propagated all the way up the call stack, leading to an 
> unexpected throwable at the topmost RpcServer layer and an unclear remote 
> exception on the client with a long mysterious server exception trace (the 
> call stack includes everything from the topmost RpcServer layer all the way 
> down to the comparator layer, see HBASE-29678 for an example). 
> +Proposal+
> We should handle comparison runtime exceptions at the filter layer and treat 
> them as HBaseIOException, and propagate a clear exception message and stack 
> trace to the client. This is beneficial for any type of runtime exception 
> that can occur in a comparator, and will also lets us handle cases where we 
> know that a client retry is guaranteed to fail and let us prevent bad 
> requests from being excessively retried (such as HBASE-29654 , HBASE-29678).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to