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

Lars Hofhansl commented on HBASE-26812:
---------------------------------------

[~comnetwork] I came to the same conclusion. So what do we do about it?

The RegionScannerImpl should be closed after the local client's Get operation 
has returned. It seems we need a "fake" ServerCall for this, but that's tricky, 
since we need to close only those RegionScanners involved in the local 
operation not all of them. Perhaps some other API that wraps RsRPCServices in 
this case.

I can think of some fragile ways of fixing this, like putting another 
threadlocal marker on the current thread, but I do not like that.

As is we have a timebomb in HBase. Might be best to disable any local 
optimization until we have a fix.


> 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