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

Rick Shaw edited comment on CASSANDRA-3244 at 9/23/11 2:04 PM:
---------------------------------------------------------------

Creating a {{Statement}} every time you need one is unnecessary but not 
illegal. The assumption is the {{Statement}} is closed when Spring is done, 
which should be just fine. The problem is the list in {{Connection}} _should_ 
be a list of open {{Statements}}. The implication being that closing a 
{{Statement}} removes itself from that list. Unfortunately this is not being 
done. 

The list is necessary. But it needs to be maintained by {{Statement}} because 
only it knows when it is asked to close.

As a note this has nothing to do with pooling. The JDBC driver pooling 
({{PooledConnection}}) will handle the issues around {{Statement}} creation and 
does not engage the physical {{Connection}} so the connection can be reused 
because none of that state is placed at the physical level and is therefore 
reusable without closing it.

Thanks for catching this bug. I'll create a fix for this. 

      was (Author: ardot):
    Creating a {{Statement}} every time you need one is unnecessary but not 
illegal. The assumption is the {{Statement}} is closed when Spring is done, 
which should be just fine. The problem is the list in {{Connection}} _should_ 
be a list of open {{Statements}}. The implecation being that closing a 
{{Statement}} removes itself from that list. Unfortunately this is not being 
done. 

The list is necessary. But it needs to be maintained by {{Statement}} because 
only it knows when it is asked to close.

As a note this has nothing to do with pooling. The JDBC driver pooling 
({{PooledConnection}}) will handle the issues around {{Statement}} creation and 
does not engage the physical {{Connection}} so the connection can be reused 
because none of that state is placed at the physical level and is therefore 
reusable without closing it.

Thanks for catching this bug. I'll create a fix for this. 
  
> JDBC CassandraConnection may lead to memory leak when used in a pool
> --------------------------------------------------------------------
>
>                 Key: CASSANDRA-3244
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3244
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Drivers
>    Affects Versions: 1.0.0
>            Reporter: Patricio Echague
>            Priority: Minor
>
> I may be wrong here but I noticed that the implementations of 
> CassandraConnection#createStatement() and 
> CassandraConnection#prepareStatement() keep(cache) the created 
> Statement/PrepareStatement internally in a List.
> They list is freed up only during CassandraConnection.close() which makes me 
> think that, if the connection object is used in a pool implementation, it 
> will lead to a memory leak as it will hold every single statement that is 
> used to interact with the DB until the connection gets closed. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to