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

Duo Zhang commented on HBASE-17118:
-----------------------------------

Usually we should avoid catching Throwable, catching Exception is enough.

[~tedyu] For java7 or newer you can still get the original Throwable and you 
can get the exception of scanner.close by calling the getSuppressed method of 
the Throwable, and the suppressed exceptions will also be printed when calling 
printStackTrace. But I agree that we should catch the exception of 
scanner.close since it is a read operation.

Thanks.

> StoreScanner leaked in KeyValueHeap
> -----------------------------------
>
>                 Key: HBASE-17118
>                 URL: https://issues.apache.org/jira/browse/HBASE-17118
>             Project: HBase
>          Issue Type: Bug
>            Reporter: binlijin
>         Attachments: HBASE-17118-master_v1.patch, StoreScanner.png, 
> StoreScannerLeakHeap.png
>
>
> KeyValueHeap#generalizedSeek
>       KeyValueScanner scanner = current;
>       while (scanner != null) {
>         Cell topKey = scanner.peek();
>         ......
>         boolean seekResult;
>         if (isLazy && heap.size() > 0) {
>           // If there is only one scanner left, we don't do lazy seek.
>           seekResult = scanner.requestSeek(seekKey, forward, useBloom);
>         } else {
>           seekResult = NonLazyKeyValueScanner.doRealSeek(scanner, seekKey,
>               forward);
>         }
>         ......
>         scanner = heap.poll();
>       }
> (1) scanner = heap.poll();  Retrieves and removes the head of this queue
> (2) scanner.requestSeek(seekKey, forward, useBloom); or 
> NonLazyKeyValueScanner.doRealSeek(scanner, seekKey, forward);
> throw exception, and scanner will have no chance to close, so will cause the 
> scanner leak.



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

Reply via email to