Skip to content

Commit 281255d

Browse files
meeseeksdev[bot]gnestor
meeseeksdev[bot]
authored andcommitted
Backport PR jupyter#2916: allow disabling offline message buffering (jupyter#2986)
1 parent d81e329 commit 281255d

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

notebook/services/kernels/kernelmanager.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,17 @@ def _update_root_dir(self, proposal):
8383
Only effective if cull_idle_timeout is not 0."""
8484
)
8585

86+
buffer_offline_messages = Bool(True, config=True,
87+
help="""Whether messages from kernels whose frontends have disconnected should be buffered in-memory.
88+
89+
When True (default), messages are buffered and replayed on reconnect,
90+
avoiding lost messages due to interrupted connectivity.
91+
92+
Disable if long-running kernels will produce too much output while
93+
no frontends are connected.
94+
"""
95+
)
96+
8697
_kernel_buffers = Any()
8798
@default('_kernel_buffers')
8899
def _default_kernel_buffers(self):
@@ -105,7 +116,7 @@ def cwd_for_path(self, path):
105116
while not os.path.isdir(os_path) and os_path != self.root_dir:
106117
os_path = os.path.dirname(os_path)
107118
return os_path
108-
119+
109120
@gen.coroutine
110121
def start_kernel(self, kernel_id=None, path=None, **kwargs):
111122
"""Start a kernel for a session and return its kernel_id.
@@ -148,7 +159,7 @@ def start_kernel(self, kernel_id=None, path=None, **kwargs):
148159

149160
# py2-compat
150161
raise gen.Return(kernel_id)
151-
162+
152163
def start_buffering(self, kernel_id, session_key, channels):
153164
"""Start buffering messages for a kernel
154165
@@ -163,6 +174,12 @@ def start_buffering(self, kernel_id, session_key, channels):
163174
channels: dict({'channel': ZMQStream})
164175
The zmq channels whose messages should be buffered.
165176
"""
177+
178+
if not self.buffer_offline_messages:
179+
for channel, stream in channels.items():
180+
stream.close()
181+
return
182+
166183
self.log.info("Starting buffering for %s", session_key)
167184
self._check_kernel_id(kernel_id)
168185
# clear previous buffering state
@@ -182,7 +199,6 @@ def buffer_msg(channel, msg_parts):
182199
for channel, stream in channels.items():
183200
stream.on_recv(partial(buffer_msg, channel))
184201

185-
186202
def get_buffer(self, kernel_id, session_key):
187203
"""Get the buffer for a given kernel
188204

0 commit comments

Comments
 (0)