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

Jonathan Lawlor updated HBASE-13090:
------------------------------------
    Release Note: 
Previously, there was no way to enforce a time limit on scan RPC requests. The 
server would receive a scan RPC request and take as much time as it needed to 
accumulate enough results to reach a limit or exhaust the region. The problem 
with this approach was that, in the case of a very selective scan, the 
processing of the scan could take too long and cause timeouts client side.

With this fix, the server will now enforce a time limit on the execution of 
scan RPC requests. When a scan RPC request arrives to the server, a time limit 
is calculated to be half of whichever timeout value is more restictive between 
the configurations ("hbase.client.scanner.timeout.period" and 
"hbase.rpc.timeout"). When the time limit is reached, the server will return 
whatever results it has accumulated up to that point. The results may be empty.

To ensure that timeout checks do not occur too often (which would hurt the 
performance of scans), the configuration 
"hbase.cells.scanned.per.heartbeat.check" has been introduced. This 
configuration controls how often System.currentTimeMillis() is called to update 
the progress towards the time limit. Currently, the default value of this 
configuration value is 10000. Specifying a smaller value will provide a tighter 
bound on the time limit, but may hurt scan performance due to the higher 
frequency of calls to System.currentTimeMillis().

Protobuf models for ScanRequest and ScanResponse have been updated so that 
heartbeat support can be communicated. Support for heartbeat messages is 
specified in the request sent to the server via 
ScanRequest.Builder#setClientHandlesHeartbeats. Only when the server sees that 
ScanRequest#getClientHandlesHeartbeats() is true will it send heartbeat 
messages back to the client. A response is marked as a heartbeat message via 
the boolean flag ScanResponse#getHeartbeatMessage

> Progress heartbeats for long running scanners
> ---------------------------------------------
>
>                 Key: HBASE-13090
>                 URL: https://issues.apache.org/jira/browse/HBASE-13090
>             Project: HBase
>          Issue Type: New Feature
>            Reporter: Andrew Purtell
>            Assignee: Jonathan Lawlor
>             Fix For: 2.0.0, 1.2.0
>
>         Attachments: HBASE-13090-v1.patch, HBASE-13090-v2.patch, 
> HBASE-13090-v3.patch, HBASE-13090-v3.patch, HBASE-13090-v4.patch, 
> HBASE-13090-v6.patch, HBASE-13090-v7.patch
>
>
> It can be necessary to set very long timeouts for clients that issue scans 
> over large regions when all data in the region might be filtered out 
> depending on scan criteria. This is a usability concern because it can be 
> hard to identify what worst case timeout to use until scans are 
> occasionally/intermittently failing in production, depending on variable scan 
> criteria. It would be better if the client-server scan protocol can send back 
> periodic progress heartbeats to clients as long as server scanners are alive 
> and making progress.
> This is related but orthogonal to streaming scan (HBASE-13071). 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to