Skip to content

SNOW-2920022: SessionManager leaks memory due to defaultdict usage for sessions map #2727

@timgraham

Description

@timgraham

While developing https://github.com/Snowflake-Labs/django-snowflake and after fixing #2725, a Django test reveals that SessionManager.__init__() leaks memory due to defaultdict usage for the SessionManager._sessions_map:

======================================================================
FAIL: test_select_related_memory_leak (select_related.tests.SelectRelatedTests.test_select_related_memory_leak)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/tim/code/django/tests/select_related/tests.py", line 149, in test_select_related_memory_leak
    self.assert_no_memory_leaks()
  File "/home/tim/code/django/tests/select_related/tests.py", line 73, in assert_no_memory_leaks
    self.assertEqual(gc.garbage, [])
AssertionError: Lists differ: [<snowflake.connector.session_manager.Sess[330 chars] {})] != []

First list contains 5 additional elements.
First extra element 0:
<snowflake.connector.session_manager.SessionManager object at 0x7bb6daff8dd0>

+ []
- [<snowflake.connector.session_manager.SessionManager object at 0x7bb6daff8dd0>,
-  <cell at 0x7bb6daffb6a0: SessionManager object at 0x7bb6daff8dd0>,
-  (<cell at 0x7bb6daffb6a0: SessionManager object at 0x7bb6daff8dd0>,),
-  <function SessionManager.__init__.<locals>.<lambda> at 0x7bb6dad16160>,
-  defaultdict(<function SessionManager.__init__.<locals>.<lambda> at 0x7bb6dad16160>, {})]

I'm not sure how to fix this offhand.

Metadata

Metadata

Labels

bugstatus-triage_doneInitial triage done, will be further handled by the driver team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions