Skip to content

Commit a4e1d53

Browse files
shuichiro-makigakiecharles
authored andcommitted
Fix packages of exceptions catched by gateway manager (#139)
`gateway_request` in `gateway.manager` raises `tornado.web.HTTPError` exceptions, but the callers, such as `GatewayKernelManager.get_kernel`, catch `tornado.httpclient.HTTPError`, instead of `tornado.web.HTTPError`. Therefore, the callers can not handle exceptions during gateway interactions. This causes that, for example, when Jupyter Enterprise Gateway culled a kernel by idle timeout, the gateway manager can not handle the kernel's absent appropriately. As a result, notebook users see ambiguous "Kernel Error" and can not restart the kernel or start a new kernel.
1 parent 00428a1 commit a4e1d53

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

jupyter_server/gateway/managers.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,12 @@ def gateway_request(endpoint, **kwargs):
283283
except ConnectionRefusedError:
284284
raise web.HTTPError(503, "Connection refused from Gateway server url '{}'. "
285285
"Check to be sure the Gateway instance is running.".format(GatewayClient.instance().url))
286-
except HTTPError:
286+
except HTTPError as e:
287287
# This can occur if the host is valid (e.g., foo.com) but there's nothing there.
288-
raise web.HTTPError(504, "Error attempting to connect to Gateway server url '{}'. "
288+
raise web.HTTPError(e.code, "Error attempting to connect to Gateway server url '{}'. "
289289
"Ensure gateway url is valid and the Gateway instance is running.".
290290
format(GatewayClient.instance().url))
291-
except gaierror as e:
291+
except gaierror:
292292
raise web.HTTPError(404, "The Gateway server specified in the gateway_url '{}' doesn't appear to be valid. "
293293
"Ensure gateway url is valid and the Gateway instance is running.".
294294
format(GatewayClient.instance().url))
@@ -390,8 +390,8 @@ def get_kernel(self, kernel_id=None, **kwargs):
390390
self.log.debug("Request kernel at: %s" % kernel_url)
391391
try:
392392
response = yield gateway_request(kernel_url, method='GET')
393-
except HTTPError as error:
394-
if error.code == 404:
393+
except web.HTTPError as error:
394+
if error.status_code == 404:
395395
self.log.warn("Kernel not found at: %s" % kernel_url)
396396
self.remove_kernel(kernel_id)
397397
kernel = None
@@ -559,8 +559,8 @@ def get_kernel_spec(self, kernel_name, **kwargs):
559559
self.log.debug("Request kernel spec at: %s" % kernel_spec_url)
560560
try:
561561
response = yield gateway_request(kernel_spec_url, method='GET')
562-
except HTTPError as error:
563-
if error.code == 404:
562+
except web.HTTPError as error:
563+
if error.status_code == 404:
564564
# Convert not found to KeyError since that's what the Notebook handler expects
565565
# message is not used, but might as well make it useful for troubleshooting
566566
raise KeyError('kernelspec {kernel_name} not found on Gateway server at: {gateway_url}'.
@@ -587,8 +587,8 @@ def get_kernel_spec_resource(self, kernel_name, path):
587587
self.log.debug("Request kernel spec resource '{}' at: {}".format(path, kernel_spec_resource_url))
588588
try:
589589
response = yield gateway_request(kernel_spec_resource_url, method='GET')
590-
except HTTPError as error:
591-
if error.code == 404:
590+
except web.HTTPError as error:
591+
if error.status_code == 404:
592592
kernel_spec_resource = None
593593
else:
594594
raise

jupyter_server/tests/test_gateway.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import uuid
55
from datetime import datetime
66
from tornado import gen
7-
from tornado.httpclient import HTTPRequest, HTTPResponse, HTTPError
7+
from tornado.web import HTTPError
8+
from tornado.httpclient import HTTPRequest, HTTPResponse
89
from ipython_genutils.py3compat import str_to_unicode
910
from .launchserver import ServerTestBase
1011
from jupyter_server.gateway.managers import GatewayClient

0 commit comments

Comments
 (0)