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)

Reply via email to