Vladimir Ozerov created IGNITE-2643:
---------------------------------------
Summary: ODBC: Potential memory leak during client disconnect.
Key: IGNITE-2643
URL:
https://issues.apache.org/jira/browse/IGNITE-2643 Project: Ignite
Issue Type: Sub-task
Components: odbc
Affects Versions: 1.5.0.final
Reporter: Vladimir Ozerov
Assignee: Igor Sapego
Priority: Critical
Fix For: 1.6
*Problem*
When client executes a query, we preserve the cursor in concurrent collection. This could lead to two potential problems:
1) If problem disconnected abruptly, cursor gets stuck forever => memory leak.
2) Malicious client could flood us with requests which are never closed until node is out-of-memory.
*Proposed solution*
1) When onDisconnect() callback is triggered, all pending client queries must be released. To achieve this it is better to move "OdbcNioListener.qryCurs" to session meta.
2) When new request is to be created, we must ensure that concurrent disconnect is not in progress. Otherwise, we might end up in a leak again. To achieve this, lets guard "add" logic with read-write lock.
3) Lets think about "max-concurrent-cursors-per-connection" property. It could be available from OdbcConfiguration. Once number of opened cursors is exceeded, we must throw an error to the client.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)