Skip to content

Commit 9dc49ee

Browse files
committed
Improve error handling for connection closed errors
If the connection closes for some other reason than token expiry, retry in 5 seconds.
1 parent 6d22f93 commit 9dc49ee

2 files changed

Lines changed: 15 additions & 4 deletions

File tree

src/relay_listener.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
ACTIONS = {
3333
"worklist.create_item": CreateWorklistItem,
3434
}
35+
EXPIRED_TOKEN = "ExpiredToken"
3536

3637

3738
class RelayListener:
@@ -140,11 +141,15 @@ async def main():
140141
logger.warning("\nShutting down...")
141142
break
142143
except ConnectionClosedError as e:
143-
if "ExpiredToken" in str(e) and e.code == CloseCode.INTERNAL_ERROR.value:
144+
code = e.rcvd.code if e.rcvd else "N/A"
145+
reason = e.rcvd.reason if e.rcvd else "N/A"
146+
147+
if code == CloseCode.INTERNAL_ERROR.value and EXPIRED_TOKEN in reason:
144148
logger.info("SAS token expired, refreshing...")
145149
else:
146-
logger.warning(f"Connection closed with code {e.code}: {e.reason}")
147-
raise e
150+
logger.warning(f"Connection closed with code {code}: {reason}")
151+
logger.warning("Retrying in 5 seconds...")
152+
await asyncio.sleep(5)
148153
except Exception as e:
149154
logger.warning(f"Connection error: {e}")
150155
logger.warning("Retrying in 5 seconds...")

tests/test_relay_listener.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,18 @@ async def test_main_handles_connection_closed_and_keyboard_interrupt(
138138

139139
relay_listener_instance.listen.side_effect = [
140140
ConnectionClosedError(Close(CloseCode.INTERNAL_ERROR, "ExpiredToken"), None),
141+
ConnectionClosedError(Close(CloseCode.INTERNAL_ERROR, "Something else"), None),
142+
ConnectionClosedError(Close(CloseCode.BAD_GATEWAY, "Bad gateway"), None),
141143
KeyboardInterrupt(),
142144
]
143145

144146
await main()
145147

146-
assert relay_listener_instance.listen.call_count == 2
148+
assert relay_listener_instance.listen.call_count == 4
147149
mock_logger.info.assert_any_call("Socket Listener Starting...")
148150
mock_logger.info.assert_any_call("SAS token expired, refreshing...")
151+
mock_logger.warning.assert_any_call("Connection closed with code 1011: Something else")
152+
mock_logger.warning.assert_any_call("Retrying in 5 seconds...")
153+
mock_logger.warning.assert_any_call("Connection closed with code 1014: Bad gateway")
154+
mock_logger.warning.assert_any_call("Retrying in 5 seconds...")
149155
mock_logger.warning.assert_any_call("\nShutting down...")

0 commit comments

Comments
 (0)