Skip to content

Commit f7575ec

Browse files
committed
Eliminate the need to map nested kernel IDs to outer kernel IDs
1 parent a58ea65 commit f7575ec

1 file changed

Lines changed: 14 additions & 26 deletions

File tree

jupyter_server/services/kernels/routing.py

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,6 @@ async def prepare(self):
216216

217217

218218
class RoutingKernelManager(ServerKernelManager):
219-
kernel_id_map: dict[str, str] = {}
220-
221219
@property
222220
def is_remote(self):
223221
if not self.kernel_name or not self.kernel_id:
@@ -234,8 +232,7 @@ def wrapped_multi_kernel_manager(self):
234232
def wrapped_kernel_manager(self):
235233
if not self.kernel_id:
236234
return None
237-
wrapped_kernel_id = RoutingKernelManager.kernel_id_map.get(self.kernel_id, self.kernel_id)
238-
return self.wrapped_multi_kernel_manager.get_kernel(wrapped_kernel_id)
235+
return self.wrapped_multi_kernel_manager.get_kernel(self.kernel_id)
239236

240237
@default("websocket_connection_class")
241238
def _default_websocket_connection_class(self):
@@ -259,44 +256,29 @@ def client(self, *args, **kwargs):
259256

260257
@in_pending_state
261258
async def start_kernel(self, *args, **kwargs):
262-
kernel_id: t.Optional[str] = kwargs.pop("kernel_id", self.kernel_id)
263-
if kernel_id:
264-
self.kernel_id = kernel_id
265-
266259
km = self.wrapped_multi_kernel_manager
260+
if isinstance(km, GatewayMappingKernelManager):
261+
kwargs.pop("kernel_id")
267262
wrapped_kernel_id: str = await ensure_async(
268263
km.start_kernel(kernel_name=self.kernel_name, **kwargs)
269264
)
270-
self.kernel_id = self.kernel_id or wrapped_kernel_id
271-
RoutingKernelManager.kernel_id_map[self.kernel_id] = wrapped_kernel_id
272-
self.log.debug(
273-
f"Created kernel {self.kernel_id} corresponding to {wrapped_kernel_id} in {km}"
274-
)
275-
self.log.debug(RoutingKernelManager.kernel_id_map)
265+
self.kernel_id = wrapped_kernel_id
266+
self.log.debug(f"Created kernel {self.kernel_id} in {km}")
276267

277268
async def shutdown_kernel(self, now=False, restart=False):
278-
wrapped_kernel_id = RoutingKernelManager.kernel_id_map.get(self.kernel_id, self.kernel_id)
279269
km = self.wrapped_multi_kernel_manager
280-
await ensure_async(km.shutdown_kernel(wrapped_kernel_id, now=now, restart=restart))
281-
RoutingKernelManager.kernel_id_map.pop(self.kernel_id, None)
270+
await ensure_async(km.shutdown_kernel(self.kernel_id, now=now, restart=restart))
282271

283272
async def restart_kernel(self, now=False):
284-
wrapped_kernel_id = RoutingKernelManager.kernel_id_map.get(self.kernel_id, self.kernel_id)
285273
km = self.wrapped_multi_kernel_manager
286-
return await ensure_async(km.restart_kernel(wrapped_kernel_id, now=now))
274+
return await ensure_async(km.restart_kernel(self.kernel_id, now=now))
287275

288276
async def interrupt_kernel(self):
289277
km = self.wrapped_kernel_manager
290278
return await ensure_async(km.interrupt_kernel())
291279

292280
async def model(self):
293-
wrapped_kernel_id = RoutingKernelManager.kernel_id_map.get(self.kernel_id, self.kernel_id)
294-
wrapped_model = await ensure_async(
295-
self.wrapped_multi_kernel_manager.kernel_model(wrapped_kernel_id)
296-
)
297-
model = copy.deepcopy(wrapped_model)
298-
model["id"] = self.kernel_id
299-
return model
281+
return await ensure_async(self.wrapped_multi_kernel_manager.kernel_model(self.kernel_id))
300282

301283

302284
class RoutingMappingKernelManager(AsyncMappingKernelManager):
@@ -339,6 +321,12 @@ def has_remote_kernels(self):
339321
return True
340322
return False
341323

324+
def pre_start_kernel(self, *args, **kwargs):
325+
km, kernel_name, kernel_id = super().pre_start_kernel(*args, **kwargs)
326+
if km and km.kernel_id and km.kernel_id != kernel_id:
327+
kernel_id = km.kernel_id
328+
return km, kernel_name, kernel_id
329+
342330
async def list_kernels(self):
343331
if self.has_remote_kernels():
344332
# We have remote kernels, so we must call `list_kernels` on the

0 commit comments

Comments
 (0)