diff --git a/jupyterhub/handlers/base.py b/jupyterhub/handlers/base.py index 91bf4a4e..12c48be2 100644 --- a/jupyterhub/handlers/base.py +++ b/jupyterhub/handlers/base.py @@ -912,7 +912,7 @@ class BaseHandler(RequestHandler): self.log.error( "Stopping %s to avoid inconsistent state", user_server_name ) - await user.stop() + await user.stop(server_name) PROXY_ADD_DURATION_SECONDS.labels(status='failure').observe( time.perf_counter() - proxy_add_start_time ) diff --git a/jupyterhub/tests/test_named_servers.py b/jupyterhub/tests/test_named_servers.py index d4593083..20e515a2 100644 --- a/jupyterhub/tests/test_named_servers.py +++ b/jupyterhub/tests/test_named_servers.py @@ -368,3 +368,28 @@ async def test_user_redirect_hook_default_server_name( assert redirected_url.path == url_path_join( app.base_url, 'user', username, 'terminals/1' ) + + +async def test_named_server_stop_server(app, username, named_servers): + server_name = "myserver" + await app.login_user(username) + user = app.users[username] + + r = await api_request(app, 'users', username, 'server', method='post') + assert r.status_code == 201 + assert r.text == '' + assert user.spawners[''].server + + with mock.patch.object( + app.proxy, 'add_user', side_effect=Exception('mock exception') + ): + r = await api_request( + app, 'users', username, 'servers', server_name, method='post' + ) + r.raise_for_status() + assert r.status_code == 201 + assert r.text == '' + + assert user.spawners[server_name].server is None + assert user.spawners[''].server + assert user.running