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

Todd Lipcon commented on HDFS-4824:
-----------------------------------

I was thinking that the real issue here seems to be that we have an 
uncollectable set of objects where the only incoming reference is coming from 
the CacheCleaner object which is staying in the executor (which is a GC root). 
So, just breaking that one reference would mean that the whole set of objects 
could be GCed (since nothing else refers into that graph).

With your fix in place, if you leak a DFSInputStream without closing, does it 
eventually get GCed in a full GC? Or would it stay around forever? I don't 
think there are other hanging references to DFSInputStreams, but maybe I'm 
wrong.
                
> FileInputStreamCache.close leaves dangling reference to 
> FileInputStreamCache.cacheCleaner
> -----------------------------------------------------------------------------------------
>
>                 Key: HDFS-4824
>                 URL: https://issues.apache.org/jira/browse/HDFS-4824
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs-client
>    Affects Versions: 2.0.4-alpha
>            Reporter: Henry Robinson
>            Assignee: Colin Patrick McCabe
>         Attachments: HDFS-4824.001.patch
>
>
> {{FileInputStreamCache}} leaves around a reference to its {{cacheCleaner}} 
> after {{close()}}.
> The {{cacheCleaner}} is created like this:
> {code}
> if (cacheCleaner == null) {
>           cacheCleaner = new CacheCleaner();
>           executor.scheduleAtFixedRate(cacheCleaner, expiryTimeMs, 
> expiryTimeMs,
>               TimeUnit.MILLISECONDS);
>         }
> {code}
> and supposedly removed like this:
> {code}
> if (cacheCleaner != null) {
>   executor.remove(cacheCleaner);
> }
> {code}
> However, {{ScheduledThreadPoolExecutor.remove}} returns a success boolean 
> which should be checked. And I _think_ from a quick read of that class that 
> the return value of {{scheduleAtFixedRate}} should be used as the argument to 
> {{remove}}. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to