mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-10 19:43:01 +00:00
cleanup servers, api tokens after spawner shutdown
prevents growing table of unused servers and tokens
This commit is contained in:
@@ -347,6 +347,7 @@ def test_spawn(app, io_loop):
|
|||||||
's': ['value'],
|
's': ['value'],
|
||||||
'i': 5,
|
'i': 5,
|
||||||
}
|
}
|
||||||
|
before_servers = sorted(db.query(orm.Server), key=lambda s: s.url)
|
||||||
r = api_request(app, 'users', name, 'server', method='post', data=json.dumps(options))
|
r = api_request(app, 'users', name, 'server', method='post', data=json.dumps(options))
|
||||||
assert r.status_code == 201
|
assert r.status_code == 201
|
||||||
assert 'pid' in user.state
|
assert 'pid' in user.state
|
||||||
@@ -379,6 +380,13 @@ def test_spawn(app, io_loop):
|
|||||||
status = io_loop.run_sync(app_user.spawner.poll)
|
status = io_loop.run_sync(app_user.spawner.poll)
|
||||||
assert status == 0
|
assert status == 0
|
||||||
|
|
||||||
|
# check that we cleaned up after ourselves
|
||||||
|
assert user.server is None
|
||||||
|
after_servers = sorted(db.query(orm.Server), key=lambda s: s.url)
|
||||||
|
assert before_servers == after_servers
|
||||||
|
tokens = list(db.query(orm.APIToken).filter(orm.APIToken.user_id==user.id))
|
||||||
|
assert tokens == []
|
||||||
|
|
||||||
|
|
||||||
def test_slow_spawn(app, io_loop):
|
def test_slow_spawn(app, io_loop):
|
||||||
# app.tornado_application.settings['spawner_class'] = mocking.SlowSpawner
|
# app.tornado_application.settings['spawner_class'] = mocking.SlowSpawner
|
||||||
|
@@ -291,12 +291,20 @@ class User(HasTraits):
|
|||||||
self.spawner.stop_polling()
|
self.spawner.stop_polling()
|
||||||
self.stop_pending = True
|
self.stop_pending = True
|
||||||
try:
|
try:
|
||||||
|
api_token = self.spawner.api_token
|
||||||
status = yield spawner.poll()
|
status = yield spawner.poll()
|
||||||
if status is None:
|
if status is None:
|
||||||
yield self.spawner.stop()
|
yield self.spawner.stop()
|
||||||
spawner.clear_state()
|
spawner.clear_state()
|
||||||
self.state = spawner.get_state()
|
self.state = spawner.get_state()
|
||||||
self.last_activity = datetime.utcnow()
|
self.last_activity = datetime.utcnow()
|
||||||
|
# cleanup server entry, API token from defunct server
|
||||||
|
if self.server:
|
||||||
|
# cleanup server entry from db
|
||||||
|
self.db.delete(self.server)
|
||||||
|
orm_token = orm.APIToken.find(self.db, api_token)
|
||||||
|
if orm_token:
|
||||||
|
self.db.delete(orm_token)
|
||||||
self.server = None
|
self.server = None
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
finally:
|
finally:
|
||||||
|
Reference in New Issue
Block a user