@@ -55,21 +55,18 @@ class ConnectionManager:
5555 _reconnect_lock : asyncio .Lock = field (init = False , default_factory = asyncio .Lock )
5656 _task_group : asyncio .TaskGroup = field (init = False , default_factory = asyncio .TaskGroup )
5757 _send_heartbeat_task : asyncio .Task [None ] = field (init = False , repr = False )
58- _check_server_heartbeat_task : asyncio .Task [None ] = field (init = False , repr = False )
5958
6059 async def __aenter__ (self ) -> Self :
6160 await self ._task_group .__aenter__ ()
6261 self ._send_heartbeat_task = self ._task_group .create_task (asyncio .sleep (0 ))
63- self ._check_server_heartbeat_task = self ._task_group .create_task (asyncio .sleep (0 ))
6462 self ._active_connection_state = await self ._get_active_connection_state (is_initial_call = True )
6563 return self
6664
6765 async def __aexit__ (
6866 self , exc_type : type [BaseException ] | None , exc_value : BaseException | None , traceback : TracebackType | None
6967 ) -> None :
7068 self ._send_heartbeat_task .cancel ()
71- self ._check_server_heartbeat_task .cancel ()
72- await asyncio .wait ([self ._send_heartbeat_task , self ._check_server_heartbeat_task ])
69+ await asyncio .wait ([self ._send_heartbeat_task ])
7370 await self ._task_group .__aexit__ (exc_type , exc_value , traceback )
7471
7572 if not self ._active_connection_state :
@@ -82,29 +79,16 @@ async def __aexit__(
8279
8380 def _restart_heartbeat_tasks (self , server_heartbeat : Heartbeat ) -> None :
8481 self ._send_heartbeat_task .cancel ()
85- self ._check_server_heartbeat_task .cancel ()
8682 self ._send_heartbeat_task = self ._task_group .create_task (
8783 self ._send_heartbeats_forever (server_heartbeat .want_to_receive_interval_ms )
8884 )
89- self ._check_server_heartbeat_task = self ._task_group .create_task (
90- self ._check_server_heartbeat_forever (server_heartbeat .will_send_interval_ms )
91- )
9285
9386 async def _send_heartbeats_forever (self , send_heartbeat_interval_ms : int ) -> None :
9487 send_heartbeat_interval_seconds = send_heartbeat_interval_ms / 1000
9588 while True :
9689 await self .write_heartbeat_reconnecting ()
9790 await asyncio .sleep (send_heartbeat_interval_seconds )
9891
99- async def _check_server_heartbeat_forever (self , receive_heartbeat_interval_ms : int ) -> None :
100- receive_heartbeat_interval_seconds = receive_heartbeat_interval_ms / 1000
101- while True :
102- await asyncio .sleep (receive_heartbeat_interval_seconds * self .check_server_alive_interval_factor )
103- if not self ._active_connection_state :
104- continue
105- if not self ._active_connection_state .is_alive (self .check_server_alive_interval_factor ):
106- self ._clear_active_connection_state ()
107-
10892 async def _create_connection_to_one_server (
10993 self , server : ConnectionParameters
11094 ) -> tuple [AbstractConnection , ConnectionParameters ] | None :
@@ -168,7 +152,7 @@ async def _get_active_connection_state(self, *, is_initial_call: bool = False) -
168152 self ._active_connection_state = connection_result
169153 if not is_initial_call :
170154 LOGGER .warning (
171- "reconnected after failure connection failure. connection_parameters: %s" ,
155+ "reconnected after connection failure. connection_parameters: %s" ,
172156 connection_result .lifespan .connection_parameters ,
173157 )
174158 return connection_result
@@ -178,11 +162,12 @@ async def _get_active_connection_state(self, *, is_initial_call: bool = False) -
178162
179163 raise FailedAllConnectAttemptsError (retry_attempts = self .connect_retry_attempts , issues = connection_issues )
180164
181- def _clear_active_connection_state (self ) -> None :
165+ def _clear_active_connection_state (self , error_reason : ConnectionLostError ) -> None :
182166 if not self ._active_connection_state :
183167 return
184168 LOGGER .warning (
185- "connection lost. connection_parameters: %s" ,
169+ "connection lost. reason: %r, connection_parameters: %s" ,
170+ error_reason .reason ,
186171 self ._active_connection_state .lifespan .connection_parameters ,
187172 )
188173 self ._active_connection_state = None
@@ -192,8 +177,8 @@ async def write_heartbeat_reconnecting(self) -> None:
192177 connection_state = await self ._get_active_connection_state ()
193178 try :
194179 return connection_state .connection .write_heartbeat ()
195- except ConnectionLostError :
196- self ._clear_active_connection_state ()
180+ except ConnectionLostError as error :
181+ self ._clear_active_connection_state (error )
197182
198183 raise FailedAllWriteAttemptsError (retry_attempts = self .write_retry_attempts )
199184
@@ -202,8 +187,8 @@ async def write_frame_reconnecting(self, frame: AnyClientFrame) -> None:
202187 connection_state = await self ._get_active_connection_state ()
203188 try :
204189 return await connection_state .connection .write_frame (frame )
205- except ConnectionLostError :
206- self ._clear_active_connection_state ()
190+ except ConnectionLostError as error :
191+ self ._clear_active_connection_state (error )
207192
208193 raise FailedAllWriteAttemptsError (retry_attempts = self .write_retry_attempts )
209194
@@ -213,15 +198,15 @@ async def read_frames_reconnecting(self) -> AsyncGenerator[AnyServerFrame, None]
213198 try :
214199 async for frame in connection_state .connection .read_frames ():
215200 yield frame
216- except ConnectionLostError :
217- self ._clear_active_connection_state ()
201+ except ConnectionLostError as error :
202+ self ._clear_active_connection_state (error )
218203
219204 async def maybe_write_frame (self , frame : AnyClientFrame ) -> bool :
220205 if not self ._active_connection_state :
221206 return False
222207 try :
223208 await self ._active_connection_state .connection .write_frame (frame )
224- except ConnectionLostError :
225- self ._clear_active_connection_state ()
209+ except ConnectionLostError as error :
210+ self ._clear_active_connection_state (error )
226211 return False
227212 return True
0 commit comments