cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Shaw (JIRA)" <>
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


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

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:
>             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:


View raw message