cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Shaw (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-3244) JDBC CassandraConnection may lead to memory leak when used in a pool
Date Fri, 23 Sep 2011 14:04:26 GMT

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

Rick Shaw commented on CASSANDRA-3244:
--------------------------------------

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

        

Mime
View raw message