mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-16 14:33:00 +00:00
cleanup after any exception in spawn
not just timeouts
This commit is contained in:
@@ -285,7 +285,7 @@ class User(Base):
|
||||
Returns None if not found.
|
||||
"""
|
||||
return db.query(cls).filter(cls.name==name).first()
|
||||
|
||||
|
||||
@gen.coroutine
|
||||
def spawn(self, spawner_class, base_url='/', hub=None, config=None):
|
||||
"""Start the user's spawner"""
|
||||
@@ -298,11 +298,10 @@ class User(Base):
|
||||
)
|
||||
db.add(self.server)
|
||||
db.commit()
|
||||
|
||||
|
||||
api_token = self.new_api_token()
|
||||
db.commit()
|
||||
|
||||
|
||||
spawner = self.spawner = spawner_class(
|
||||
config=config,
|
||||
user=self,
|
||||
@@ -318,17 +317,22 @@ class User(Base):
|
||||
# wait for spawner.start to return
|
||||
try:
|
||||
yield gen.with_timeout(timedelta(seconds=spawner.start_timeout), f)
|
||||
except gen.TimeoutError as e:
|
||||
self.log.warn("{user}'s server failed to start in {s} seconds, giving up".format(
|
||||
user=self.name, s=spawner.start_timeout,
|
||||
))
|
||||
except Exception as e:
|
||||
if isinstance(e, gen.TimeoutError):
|
||||
self.log.warn("{user}'s server failed to start in {s} seconds, giving up".format(
|
||||
user=self.name, s=spawner.start_timeout,
|
||||
))
|
||||
else:
|
||||
self.log.error("Unhandled error starting {user}'s server: {error}".format(
|
||||
user=self.name, error=e,
|
||||
))
|
||||
try:
|
||||
yield self.stop()
|
||||
except Exception:
|
||||
self.log.error("Failed to cleanup {user}'s server that failed to start".format(
|
||||
user=self.name,
|
||||
), exc_info=True)
|
||||
# raise original TimeoutError
|
||||
# raise original exception
|
||||
raise e
|
||||
spawner.start_polling()
|
||||
|
||||
@@ -338,10 +342,15 @@ class User(Base):
|
||||
db.commit()
|
||||
try:
|
||||
yield self.server.wait_up(http=True)
|
||||
except TimeoutError as e:
|
||||
self.log.warn("{user}'s server never showed up at {url}, giving up".format(
|
||||
user=self.name, url=self.server.url,
|
||||
))
|
||||
except Exception as e:
|
||||
if isinstance(e, TimeoutError):
|
||||
self.log.warn("{user}'s server never showed up at {url}, giving up".format(
|
||||
user=self.name, url=self.server.url,
|
||||
))
|
||||
else:
|
||||
self.log.error("Unhandled error waiting for {user}'s server to show up at {url}: {error}".format(
|
||||
user=self.name, url=self.server.url, error=e,
|
||||
))
|
||||
try:
|
||||
yield self.stop()
|
||||
except Exception:
|
||||
|
Reference in New Issue
Block a user