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

ChiaPing Tsai resolved HBASE-13492.
-----------------------------------
    Resolution: Duplicate

> The estimation of result size may be different between ClientScanner and 
> RSRpcServices
> --------------------------------------------------------------------------------------
>
>                 Key: HBASE-13492
>                 URL: https://issues.apache.org/jira/browse/HBASE-13492
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>            Reporter: ChiaPing Tsai
>
> The ClientScanner try to find next scanner if remainingResultSize and 
> countdown are bigger than zero. 
> The remainingResultSize is calculated by CellUtil.estimatedHeapSizeOf(cell)
> {code:title=Bar.java|borderStyle=solid}
> @Override
>     public Result next() throws IOException {
>         ....
>         do {
>           ...
>           if (values != null && values.length > 0) {
>             for (Result rs : values) {
>               cache.add(rs);
>               // We don't make Iterator here
>               for (Cell cell : rs.rawCells()) {
>                 remainingResultSize -= CellUtil.estimatedHeapSizeOf(cell);
>               }
>               countdown--;
>               this.lastResult = rs;
>             }
>           }
>        }while (remainingResultSize > 0 && countdown > 0 &&
>             possiblyNextScanner(countdown, values == null));
>     }
> {code}
> RSRpcServices also use CellUtil.estimatedHeapSizeOf(cell) to calculate the 
> result size
> {code:title=Bar.java|borderStyle=solid}
>   @Override
>   public ScanResponse scan(final RpcController controller, final ScanRequest 
> request)
>   throws ServiceException {
>   ...
>             if (!results.isEmpty()) {
>               for (Result r : results) {
>                 for (Cell cell : r.rawCells()) {
>                   currentScanResultSize += CellUtil.estimatedHeapSizeOf(cell);
>                   totalCellSize += CellUtil.estimatedSerializedSizeOf(cell);
>                 }
>               }
>             }
>   ...
>  }
> {code}
> If we encode the data block, like FastDiff, the cell read from HFile is 
> implemented by ClonedSeekerState. And it's heap size is bigger than KeyValue. 
> So the RSRpcServices return the results to client with insufficient caching 
> due to result size reaches the limit. ClientScanner consider that current 
> region has no more data, and remainingResultSize and countdown are both 
> bigger than zero. In fact, the remainingResultSize should be smaller than 
> zero, and current region still have more data for reading.
> Does result size calculated by RSRpcServices should be return to client for 
> checking the remainingResultSize ?



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

Reply via email to