diff --git a/notebook/services/kernels/handlers.py b/notebook/services/kernels/handlers.py index fc38f04aad..39c1e076e5 100644 --- a/notebook/services/kernels/handlers.py +++ b/notebook/services/kernels/handlers.py @@ -461,7 +461,32 @@ def _send_status_message(self, status): msg['channel'] = 'iopub' self.write_message(json.dumps(msg, default=date_default)) - def on_kernel_restarted(self): + def on_kernel_restarted(self, **kwargs): + if 'newports' in kwargs: + self.log.debug("Kernel restarted with new ports") + newports = kwargs['newports'] + else: + self.log.debug('newports parameter is not defined, setting default to False') + newports = False + logging.info("Restarting kernel with new ports: {}".format(newports)) + if newports: + # Stream should be closed before reconnecting to the new ports + for channel, stream in self.channels.items(): + if stream is not None and not stream.closed(): + stream.on_recv(None) + stream.close() + # Connect to the stream with new ports + try: + self.create_stream() + except web.HTTPError as e: + self.log.error("Error opening stream after kernel restarted: %s", e) + for channel, stream in self.channels.items(): + if not stream.closed(): + stream.close() + self.close() + return + for channel, stream in self.channels.items(): + stream.on_recv_stream(self._on_zmq_reply) logging.warn("kernel %s restarted", self.kernel_id) self._send_status_message('restarting')