Snowflake client's global session manager is tied to melted SnowflakeCollector
There was a bug introduced by our solution to #21314 (closed). We moved the broker poll loop inside the SOCKS handler, which means that each SOCKS connection effectively has their own pool of snowflakes (i.e., their own SnowflakeCollector
). However, the session manager was kept global (shared by all connections). The session manager defines the dialContext for RedialPacketConn
and is tied to the SnowflakeCollector
it was created with.
The problem with this showed up most clearly in #40018 (closed), where mobile applications using Snowflake as a library are stopping and restarting Snowflake, but will happen in any scenario where the first SnowflakeCollector
is melted, but a new SOCKS connection is created.