[
https://issues.apache.org/jira/browse/HBASE-30033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Deep Golani reassigned HBASE-30033:
-----------------------------------
Assignee: Deep Golani
> Scan.setBatch() validation can be bypassed by calling setBatch() before
> setFilter()
> -----------------------------------------------------------------------------------
>
> Key: HBASE-30033
> URL: https://issues.apache.org/jira/browse/HBASE-30033
> Project: HBase
> Issue Type: Bug
> Components: Client
> Affects Versions: 2.5.11
> Reporter: JeongMin Ju
> Assignee: Deep Golani
> Priority: Minor
>
> Scan.setBatch(int) validates that the scan does not have a filter with
> hasFilterRow() == true, throwing IncompatibleFilterException if it does.
> However, Scan.setFilter(Filter) does not perform the reverse check against an
> existing batch setting.
> This means calling setBatch() before setFilter() silently creates an
> invalid Scan configuration that setBatch() was designed to prevent:
> {code:java}
> // This correctly throws IncompatibleFilterException
> Scan scan = new Scan();
> scan.setFilter(new PageFilter(10));
> scan.setBatch(5); // throws IncompatibleFilterException
> // This silently creates the same invalid combination
> Scan scan = new Scan();
> scan.setBatch(5); // succeeds - no filter yet
> scan.setFilter(new PageFilter(10)); // succeeds - no batch check
> // scan now has both batch and hasFilterRow()=true filter
> {code}
> When this invalid Scan is executed, setBatch splits rows into partial
> results, but filterRow() operates on partial data instead of the full row,
> producing incorrect results.
> Fix suggestion: Add validation in setFilter(Filter) to check if batch is
> already set:
> {code:java}
> public Scan setFilter(Filter filter) {
> super.setFilter(filter);
> if (this.batch > 0 && filter != null && filter.hasFilterRow()) {
> throw new IncompatibleFilterException(
> "Cannot set a filter that returns true for hasFilterRow on a scan
> with batch set");
> }
> return this;
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)