add session_id to /channels ws request #1556
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue to fix:
A bug in
GatewayWebSocketConnection
cause buffered messages dropped when browser reconnections to/channels
websocket with the same session_id.ZMQChannelsWebsocketConnection in Jupyter Kernel Gateway (JKG) will buffer messages after disconnecting per session. If the reconnection is made with the same session id,
ZMQChannelsWebsocketConnection.connect
method will retrieve the buffered messages and send them to the client. If there session id is not set intoZMQChannelsWebsocketConnection.session.session
,session.session
will have a random UUIC.KernelWebsocketHandler will set
session.session
to self.session, and self.session is populated by the WS request's parametersession
.If GatewayWebSocketConnection in JupyterServer makes a WS request to KernelWebsocketHandler in the JKG with a session id, the buffered messages associated with the session id will be replayed to the GatewayWebSocketConnection. However, GatewayWebSocketConnection doesn't put the session id into the request.
In the case when jupyterlab frontend creates a /channel WS connection to KernelWebsocketHandler in JupyterServer, it passes a session_id as the request parameter. When it reconnect to KernelWebsocketHandler due to disconnection, it will pass the same session_id. However this session id is not set by GatewayWebSocketConnection into the WS request to JKG. The session id used in the frontend is different than the one in the JKG. So the buffered messages are not replayed to the frontend, and dropped.