[
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)