interface: speed up handle_disconnect via shorter flush-buffer-timeout
Note in particular that _RSClient.__aexit__ calls session.close() so a lot of time can pass between interface.taskgroup raising and handle_disconnect seeing the exception. related https://github.com/spesmilo/electrum/issues/7677
This commit is contained in:
@@ -220,6 +220,19 @@ class NotificationSession(RPCSession):
|
|||||||
MAX_INCOMING_MSG_SIZE))
|
MAX_INCOMING_MSG_SIZE))
|
||||||
return NewlineFramer(max_size=max_size)
|
return NewlineFramer(max_size=max_size)
|
||||||
|
|
||||||
|
async def close(self, *, force_after: int = None):
|
||||||
|
"""Closes the connection and waits for it to be closed.
|
||||||
|
We try to flush buffered data to the wire, which can take some time.
|
||||||
|
"""
|
||||||
|
if force_after is None:
|
||||||
|
# We give up after a while and just abort the connection.
|
||||||
|
# Note: specifically if the server is running Fulcrum, waiting seems hopeless,
|
||||||
|
# the connection must be aborted (see https://github.com/cculianu/Fulcrum/issues/76)
|
||||||
|
# Note: if the ethernet cable was pulled or wifi disconnected, that too might
|
||||||
|
# wait until this timeout is triggered
|
||||||
|
force_after = 1 # seconds
|
||||||
|
await super().close(force_after=force_after)
|
||||||
|
|
||||||
|
|
||||||
class NetworkException(Exception): pass
|
class NetworkException(Exception): pass
|
||||||
|
|
||||||
@@ -693,11 +706,6 @@ class Interface(Logger):
|
|||||||
"""Closes the connection and waits for it to be closed.
|
"""Closes the connection and waits for it to be closed.
|
||||||
We try to flush buffered data to the wire, which can take some time.
|
We try to flush buffered data to the wire, which can take some time.
|
||||||
"""
|
"""
|
||||||
if force_after is None:
|
|
||||||
# We give up after a while and just abort the connection.
|
|
||||||
# Note: specifically if the server is running Fulcrum, waiting seems hopeless,
|
|
||||||
# the connection must be aborted (see https://github.com/cculianu/Fulcrum/issues/76)
|
|
||||||
force_after = 1 # seconds
|
|
||||||
if self.session:
|
if self.session:
|
||||||
await self.session.close(force_after=force_after)
|
await self.session.close(force_after=force_after)
|
||||||
# monitor_connection will cancel tasks
|
# monitor_connection will cancel tasks
|
||||||
|
|||||||
Reference in New Issue
Block a user