Skip to content

Commit 35ac42b

Browse files
authored
Merge pull request #4513 from minrk/websocket-closed-forward
Fix regressions in 5.7.x
2 parents eba43aa + 850eda5 commit 35ac42b

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

docs/source/changelog.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ We strongly recommend that you upgrade pip to version 9+ of pip before upgrading
2121
Use ``pip install pip --upgrade`` to upgrade pip. Check pip version with
2222
``pip --version``.
2323

24+
.. _release-5.7.7:
25+
26+
5.7.7
27+
-----
28+
29+
- Fix regression in restarting kernels in 5.7.5.
30+
The restart handler would return before restart was completed.
31+
- Further improve compatibility with tornado 6 with improved
32+
checks for when websockets are closed.
33+
- Fix regression in 5.7.6 on Windows where .js files could have the wrong mime-type.
34+
2435
.. _release-5.7.6:
2536

2637
5.7.6

notebook/base/zmqhandlers.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
import tornado
1313
from tornado import gen, ioloop, web
14-
from tornado.websocket import WebSocketHandler
14+
from tornado.iostream import StreamClosedError
15+
from tornado.websocket import WebSocketHandler, WebSocketClosedError
1516

1617
from jupyter_client.session import Session
1718
from jupyter_client.jsonutil import date_default, extract_dates
@@ -181,8 +182,13 @@ def send_ping(self):
181182
self.log.warning("WebSocket ping timeout after %i ms.", since_last_pong)
182183
self.close()
183184
return
185+
try:
186+
self.ping(b'')
187+
except (StreamClosedError, WebSocketClosedError):
188+
# websocket has been closed, stop pinging
189+
self.ping_callback.stop()
190+
return
184191

185-
self.ping(b'')
186192
self.last_ping = now
187193

188194
def on_pong(self, data):
@@ -242,8 +248,14 @@ def _on_zmq_reply(self, stream, msg_list):
242248
msg = self._reserialize_reply(msg_list, channel=channel)
243249
except Exception:
244250
self.log.critical("Malformed message: %r" % msg_list, exc_info=True)
245-
else:
251+
return
252+
253+
try:
246254
self.write_message(msg, binary=isinstance(msg, bytes))
255+
except (StreamClosedError, WebSocketClosedError):
256+
self.log.warning("zmq message arrived on closed channel")
257+
self.close()
258+
return
247259

248260

249261
class AuthenticatedZMQStreamHandler(ZMQStreamHandler, IPythonHandler):

notebook/services/kernels/kernelmanager.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ def on_restart_failed():
342342
channel.on_recv(on_reply)
343343
loop = IOLoop.current()
344344
timeout = loop.add_timeout(loop.time() + self.kernel_info_timeout, on_timeout)
345-
raise gen.Return(future)
345+
# wait for restart to complete
346+
yield future
346347

347348
def notify_connect(self, kernel_id):
348349
"""Notice a new connection to a kernel"""

0 commit comments

Comments
 (0)