From ac604a2f4f853e91a7db50594d0fadc0abc524c7 Mon Sep 17 00:00:00 2001 From: Ro'e Katz Date: Thu, 14 Sep 2023 15:48:22 +0300 Subject: [PATCH 1/2] Bump version to 0.7.4 --- packages/__packaging__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/__packaging__.py b/packages/__packaging__.py index 03b12c6f..8913fd99 100644 --- a/packages/__packaging__.py +++ b/packages/__packaging__.py @@ -8,7 +8,7 @@ """ import os -VERSION = (0, 7, 3) +VERSION = (0, 7, 4) VERSION_STRING = ".".join(map(str, VERSION)) __version__ = VERSION_STRING From c68e0d1af15b14f66f4349946693142b196e0b1a Mon Sep 17 00:00:00 2001 From: Ro'e Katz Date: Thu, 14 Sep 2023 19:57:33 +0300 Subject: [PATCH 2/2] Pubsub: Explicitly close websocket if main loop ends e.g. - due to broadcaster disconnection This makes client close connection when broadcaster disconnects, and thus reconenct later and not get into zombie state --- packages/opal-server/opal_server/pubsub.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/opal-server/opal_server/pubsub.py b/packages/opal-server/opal_server/pubsub.py index 81d54f80..ed5213e8 100644 --- a/packages/opal-server/opal_server/pubsub.py +++ b/packages/opal-server/opal_server/pubsub.py @@ -71,16 +71,19 @@ async def websocket_rpc_endpoint( as you can see, this endpoint is protected by an HTTP Authorization Bearer token. """ - if claims is None: - logger.info( - "Closing connection, remote address: {remote_address}", - remote_address=websocket.client, - reason="Authentication failed", - ) - await websocket.close() - return + try: + if claims is None: + logger.info( + "Closing connection, remote address: {remote_address}", + remote_address=websocket.client, + reason="Authentication failed", + ) + await websocket.close() + return - await self.endpoint.main_loop(websocket, claims=claims) + await self.endpoint.main_loop(websocket, claims=claims) + finally: + await websocket.close() @staticmethod async def _verify_permitted_topics(