Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
3.0.0-alpha-1, 1.4.0, 1.3.2, 1.5.0, 1.1.13, 2.0.0, 1.2.7
-
None
-
None
-
Reviewed
-
Performing reverse scan on tables used the meta cache incorrectly and fetched data from meta table every time. This fix solves this issue and which results in performance improvement for reverse scans.
Description
The behavior of ReversedScannerCallable#prepare [1] and ScannerCallable#prepare [2] methods differ how they call RpcRetryingCallerWithReadReplicas.getRegionLocations method.
The reversed scanner uses the 'reload' parameter directly as the first argument - RpcRetryingCallerWithReadReplicas.getRegionLocations(reload, id, getConnection(), getTableName(), getRow()) - however, the forward scanner passes '!reload'. The getRegionLocations first parameter is 'useCache', the way we use it in ScannerCallable is the correct one.
The same call can be found in ReversedScannerCallable#locateRegionsInRange [3] also without negating its value.
[1] https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ReversedScannerCallable.java#L89-L90
[2] https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ScannerCallable.java#L139-L140
[3] https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ReversedScannerCallable.java#L143-L144