accumulo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Vines (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ACCUMULO-587) Add finalize to TabletServerBatchReader to catch when user forgets to close
Date Wed, 16 May 2012 17:51:07 GMT

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

John Vines commented on ACCUMULO-587:
-------------------------------------

finalize() gets called when garbage collection is about to be performed on the object. Unfortunately,
I don't believe that garbage collection will ever occur on a non-closed Reader, because the
threadpool existence would prevent garbage collection. This is the same deal with the BatchWriter.
While putting in a finalize() would not actually cause harm in the code, I worry that it would
lead users to believe they do not need to call close() to free up the resources involved.
                
> Add finalize to TabletServerBatchReader to catch when user forgets to close
> ---------------------------------------------------------------------------
>
>                 Key: ACCUMULO-587
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-587
>             Project: Accumulo
>          Issue Type: Improvement
>          Components: client
>            Reporter: Dennis Patrone
>            Assignee: Billie Rinaldi
>            Priority: Trivial
>
> If a client forgets to close a BatchScanner or BatchDeleter, threads are leaked in the
TabletServerBatchReader implementation.  It would be nice if a finalize method were added
to check and warn the user of such a problem. The thread pool appeared to only be shared with
the TabletServerBatchReaderIterator, which maintains a reference to the TabletServerBatchReader
itself.  So AFAICT if the TabletServerBatchReader is eligible for garbage collection, there
can be no client references to that scanner or any iterators it created (i.e., it _should_
have been closed).
> For example:
> {code}
> protected void finalize() {
>    if (!queryThreadPool.isShutdown()) {
>       // add a logger reference in class initialization
>       log.warn("TabletServerBatchReader not shutdown; did you forget to call close()?");
>       close();
>    }
> }
> {code}
> The same might be true for the TabletServerBatchWriter (it has a close), but I didn't
look into that class.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message