[ 
https://issues.apache.org/jira/browse/HBASE-18042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16022903#comment-16022903
 ] 

Duo Zhang commented on HBASE-18042:
-----------------------------------

OK, finally I found that this is a bug, not by design...

If numberOfRows is zero, we will bypass the actual scan call(the private one in 
RSRpcServices) so the moreResultsInRegion flag will not be set. But at the end 
of the public scan method, we will test builder.getMoreResultsInRegion, if it 
returns false then we will close the scanner. So the problem is, for old 
client, we will set numberOfRows to 0 when opening a scanner, and the RS will 
close the scanner immediately...

Will prepare a patch soon and also add a UT to cover this.

> Client Compatibility breaks between versions 1.2 and 1.3
> --------------------------------------------------------
>
>                 Key: HBASE-18042
>                 URL: https://issues.apache.org/jira/browse/HBASE-18042
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver, scan
>    Affects Versions: 2.0.0, 1.4.0, 1.3.1
>            Reporter: Karan Mehta
>            Assignee: Duo Zhang
>            Priority: Critical
>             Fix For: 2.0.0, 1.4.0, 1.3.2
>
>         Attachments: HBASE-18042-branch-1.patch, HBASE-18042-branch-1.patch, 
> HBASE-18042.patch, HBASE-18042-v1.patch
>
>
> OpenTSDB uses AsyncHBase as its client, rather than using the traditional 
> HBase Client. From version 1.2 to 1.3, the {{ClientProtos}} have been 
> changed. Newer fields are added to {{ScanResponse}} proto.
> For a typical Scan request in 1.2, would require caller to make an 
> OpenScanner Request, GetNextRows Request and a CloseScanner Request, based on 
> {{more_rows}} boolean field in the {{ScanResponse}} proto.
> However, from 1.3, new parameter {{more_results_in_region}} was added, which 
> limits the results per region. Therefore the client has to now manage sending 
> all the requests for each region. Further more, if the results are exhausted 
> from a particular region, the {{ScanResponse}} will set 
> {{more_results_in_region}} to false, but {{more_results}} can still be true. 
> Whenever the former is set to false, the {{RegionScanner}} will also be 
> closed. 
> OpenTSDB makes an OpenScanner Request and receives all its results in the 
> first {{ScanResponse}} itself, thus creating a condition as described in 
> above paragraph. Since {{more_rows}} is true, it will proceed to send next 
> request at which point the {{RSRpcServices}} will throw 
> {{UnknownScannerException}}. The protobuf client compatibility is maintained 
> but expected behavior is modified.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to