Skip to content

Commit 5d7f3cb

Browse files
committed
[Gateway] Track only this server's kernels
1 parent 6a3f4a7 commit 5d7f3cb

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

notebook/gateway/managers.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,13 @@ async def get_kernel(self, kernel_id=None, **kwargs):
435435
raise
436436
else:
437437
kernel = json_decode(response.body)
438-
self._kernels[kernel_id] = kernel
439-
self.log.debug("Kernel retrieved: %s" % kernel)
438+
# Only update our models if we already know about this kernel
439+
if kernel_id in self._kernels:
440+
self._kernels[kernel_id] = kernel
441+
self.log.debug("Kernel retrieved: %s" % kernel)
442+
else:
443+
self.log.warning("Kernel '%s' is not managed by this instance." % kernel_id)
444+
kernel = None
440445
return kernel
441446

442447
async def kernel_model(self, kernel_id):
@@ -448,18 +453,19 @@ async def kernel_model(self, kernel_id):
448453
kernel_id : uuid
449454
The uuid of the kernel.
450455
"""
451-
self.log.debug("RemoteKernelManager.kernel_model: %s", kernel_id)
456+
self.log.debug("RemoteKernelManager.kernel_model: %s" % kernel_id)
452457
model = await self.get_kernel(kernel_id)
453458
return model
454459

455460
async def list_kernels(self, **kwargs):
456461
"""Get a list of kernels."""
457462
kernel_url = self._get_kernel_endpoint_url()
458-
self.log.debug("Request list kernels: %s", kernel_url)
463+
self.log.debug("Request list kernels: %s" % kernel_url)
459464
response = await gateway_request(kernel_url, method='GET')
460465
kernels = json_decode(response.body)
461-
self._kernels = {x['id']: x for x in kernels}
462-
return kernels
466+
# Only update our models if we already know about the kernels
467+
self._kernels = {x['id']: x for x in kernels if x['id'] in self._kernels}
468+
return list(self._kernels.values())
463469

464470
async def shutdown_kernel(self, kernel_id, now=False, restart=False):
465471
"""Shutdown a kernel by its kernel uuid.
@@ -474,9 +480,9 @@ async def shutdown_kernel(self, kernel_id, now=False, restart=False):
474480
The purpose of this shutdown is to restart the kernel (True)
475481
"""
476482
kernel_url = self._get_kernel_endpoint_url(kernel_id)
477-
self.log.debug("Request shutdown kernel at: %s", kernel_url)
483+
self.log.debug("Request shutdown kernel at: %s" % kernel_url)
478484
response = await gateway_request(kernel_url, method='DELETE')
479-
self.log.debug("Shutdown kernel response: %d %s", response.code, response.reason)
485+
self.log.debug("Shutdown kernel response: %d %s" % (response.code, response.reason))
480486
self.remove_kernel(kernel_id)
481487

482488
async def restart_kernel(self, kernel_id, now=False, **kwargs):
@@ -488,9 +494,9 @@ async def restart_kernel(self, kernel_id, now=False, **kwargs):
488494
The id of the kernel to restart.
489495
"""
490496
kernel_url = self._get_kernel_endpoint_url(kernel_id) + '/restart'
491-
self.log.debug("Request restart kernel at: %s", kernel_url)
497+
self.log.debug("Request restart kernel at: %s" % kernel_url)
492498
response = await gateway_request(kernel_url, method='POST', body=json_encode({}))
493-
self.log.debug("Restart kernel response: %d %s", response.code, response.reason)
499+
self.log.debug("Restart kernel response: %d %s" % (response.code, response.reason))
494500

495501
async def interrupt_kernel(self, kernel_id, **kwargs):
496502
"""Interrupt a kernel by its kernel uuid.
@@ -501,9 +507,9 @@ async def interrupt_kernel(self, kernel_id, **kwargs):
501507
The id of the kernel to interrupt.
502508
"""
503509
kernel_url = self._get_kernel_endpoint_url(kernel_id) + '/interrupt'
504-
self.log.debug("Request interrupt kernel at: %s", kernel_url)
510+
self.log.debug("Request interrupt kernel at: %s" % kernel_url)
505511
response = await gateway_request(kernel_url, method='POST', body=json_encode({}))
506-
self.log.debug("Interrupt kernel response: %d %s", response.code, response.reason)
512+
self.log.debug("Interrupt kernel response: %d %s" % (response.code, response.reason))
507513

508514
def shutdown_all(self, now=False):
509515
"""Shutdown all kernels."""
@@ -512,15 +518,15 @@ def shutdown_all(self, now=False):
512518
kwargs = {'method': 'DELETE'}
513519
kwargs = GatewayClient.instance().load_connection_args(**kwargs)
514520
client = HTTPClient()
515-
for kernel_id in self._kernels.keys():
521+
for kernel_id in self._kernels:
516522
kernel_url = self._get_kernel_endpoint_url(kernel_id)
517-
self.log.debug("Request delete kernel at: %s", kernel_url)
523+
self.log.debug("Request delete kernel at: %s" % kernel_url)
518524
try:
519525
response = client.fetch(kernel_url, **kwargs)
520526
except HTTPError:
521527
pass
522528
else:
523-
self.log.debug("Delete kernel response: %d %s", response.code, response.reason)
529+
self.log.debug("Delete kernel response: %d %s" % (response.code, response.reason))
524530
shutdown_kernels.append(kernel_id) # avoid changing dict size during iteration
525531
client.close()
526532
for kernel_id in shutdown_kernels:
@@ -579,7 +585,7 @@ async def get_all_specs(self):
579585
async def list_kernel_specs(self):
580586
"""Get a list of kernel specs."""
581587
kernel_spec_url = self._get_kernelspecs_endpoint_url()
582-
self.log.debug("Request list kernel specs at: %s", kernel_spec_url)
588+
self.log.debug("Request list kernel specs at: %s" % kernel_spec_url)
583589
response = await gateway_request(kernel_spec_url, method='GET')
584590
kernel_specs = json_decode(response.body)
585591
return kernel_specs

notebook/services/kernels/handlers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ def post(self):
5454
class KernelHandler(APIHandler):
5555

5656
@web.authenticated
57+
@gen.coroutine
5758
def get(self, kernel_id):
5859
km = self.kernel_manager
59-
model = km.kernel_model(kernel_id)
60+
model = yield maybe_future(km.kernel_model(kernel_id))
6061
self.finish(json.dumps(model, default=date_default))
6162

6263
@web.authenticated

0 commit comments

Comments
 (0)