Details
Description
A user can optionally specify a row PrefixFilter, or a list of custom filters, to the REST API scanner.
Prefix filter example:
<API>/123*?startrow=0&endrow=9
Custom filters example:
<API>/*?startrow=0&endrow=9&filter=RowFilter(=,'substring:456)
This works when specified separately, like above.
However, specifying both a prefix filter and a list of custom filters causes the API to ignore the prefix filter.
Example using both parameters:
<API>/123*?startrow=0&endrow=9&filter=RowFilter(=,'substring:456)
It appears that code in the TableResource.getScanResource function is causing this issue as follows:
(see https://hbase.apache.org/devapidocs/src-html/org/apache/hadoop/hbase/rest/TableResource.html#line.196 )
if (filterList != null)
{ tableScan.setFilter(filterList); /*comes from custom filters parameter*/ } else if (filter != null) {
tableScan.setFilter(filter);
/comes from row prefix parameter/
}
This should probably be changed to use a single filterList for both parameters. The prefix filter can be "Popped" onto the filter list and then these parameters will work even when both are specified.