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

Andrew Kyle Purtell commented on HBASE-26812:
---------------------------------------------

I am not opposed to fixing the problem if someone wants to fix it.

I agree this should be removed otherwise. It is just an optimization. An 
optimization no matter how impactful is bad if it is incorrect. As of now this 
one is incorrect and dangerous. If not fixed, it should be deleted.

To fix it, the fix must be implemented within the class itself. Callers cannot 
be expected to maintain discipline about internals. Also a wrapper class is not 
much help, if the user fails to notice the wrapper and uses 
ShortCircuitingClusterConnection directly, and we have no way to prevent that. 
So, please, if fixing this, figure out how to fix 
ShortCircuitingClusterConnection without requiring the user of the interface to 
do something new. 

> ShortCircuitingClusterConnection fails to close RegionScanners when making 
> short-circuited calls
> ------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-26812
>                 URL: https://issues.apache.org/jira/browse/HBASE-26812
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 2.4.9
>            Reporter: Lars Hofhansl
>            Priority: Critical
>
> Just ran into this on the Phoenix side.
> We retrieve a Connection via 
> {{{}RegionCoprocessorEnvironment.createConnection... getTable(...){}}}. And 
> then call get on that table. The Get's key happens to be local. Now each call 
> to table.get() leaves an open StoreScanner around forever. (verified with a 
> memory profiler).
> There references are held via 
> RegionScannerImpl.storeHeap.scannersForDelayedClose. Eventially the 
> RegionServer goes into a GC of death and can only ended with kill -9.
> The reason appears to be that in this case there is no currentCall context. 
> Some time in 2.x the Rpc handler/call was made responsible for closing open 
> region scanners, but we forgot to handle {{ShortCircuitingClusterConnection}}
> It's not immediately clear how to fix this. But it does make 
> ShortCircuitingClusterConnection useless and dangerous. If you use it, you 
> *will* create a giant memory leak.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to