mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-08 18:44:10 +00:00
Avoid cleaning up API tokens for Spawners that will resume
in which case the previous API token should be left alone.
This commit is contained in:
@@ -52,6 +52,14 @@ class Spawner(LoggingConfigurable):
|
|||||||
authenticator = Any()
|
authenticator = Any()
|
||||||
api_token = Unicode()
|
api_token = Unicode()
|
||||||
|
|
||||||
|
will_resume = Bool(False,
|
||||||
|
help="""Whether the Spawner will resume on next start
|
||||||
|
|
||||||
|
If a Spawner will resume instead of starting anew (e.g. resuming a Docker container),
|
||||||
|
API tokens in use when the Spawner stops will not be deleted.
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
ip = Unicode('127.0.0.1',
|
ip = Unicode('127.0.0.1',
|
||||||
help="""
|
help="""
|
||||||
The IP address (or hostname) the single-user server should listen on.
|
The IP address (or hostname) the single-user server should listen on.
|
||||||
|
@@ -234,6 +234,12 @@ class User(HasTraits):
|
|||||||
# prior to 0.7, spawners had to store this info in user.server themselves.
|
# prior to 0.7, spawners had to store this info in user.server themselves.
|
||||||
# Handle < 0.7 behavior with a warning, assuming info was stored in db by the Spawner.
|
# Handle < 0.7 behavior with a warning, assuming info was stored in db by the Spawner.
|
||||||
self.log.warning("DEPRECATION: Spawner.start should return (ip, port) in JupyterHub >= 0.7")
|
self.log.warning("DEPRECATION: Spawner.start should return (ip, port) in JupyterHub >= 0.7")
|
||||||
|
if spawner.api_token != api_token:
|
||||||
|
# Spawner re-used an API token, discard the one we just created
|
||||||
|
orm_token = orm.APIToken.find(self.db, api_token)
|
||||||
|
if orm_token is not None:
|
||||||
|
self.db.delete(orm_token)
|
||||||
|
self.db.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if isinstance(e, gen.TimeoutError):
|
if isinstance(e, gen.TimeoutError):
|
||||||
self.log.warning("{user}'s server failed to start in {s} seconds, giving up".format(
|
self.log.warning("{user}'s server failed to start in {s} seconds, giving up".format(
|
||||||
@@ -313,10 +319,11 @@ class User(HasTraits):
|
|||||||
if self.server:
|
if self.server:
|
||||||
# cleanup server entry from db
|
# cleanup server entry from db
|
||||||
self.db.delete(self.server)
|
self.db.delete(self.server)
|
||||||
|
self.server = None
|
||||||
|
if not spawner.will_resume:
|
||||||
orm_token = orm.APIToken.find(self.db, api_token)
|
orm_token = orm.APIToken.find(self.db, api_token)
|
||||||
if orm_token:
|
if orm_token:
|
||||||
self.db.delete(orm_token)
|
self.db.delete(orm_token)
|
||||||
self.server = None
|
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
finally:
|
finally:
|
||||||
self.stop_pending = False
|
self.stop_pending = False
|
||||||
|
Reference in New Issue
Block a user