mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-16 06:22:59 +00:00
Merge pull request #776 from minrk/cleanup-on-start
remove stopped users from proxy on startup
This commit is contained in:
@@ -1112,7 +1112,7 @@ class JupyterHub(Application):
|
|||||||
if self.proxy.public_server.is_up() or self.proxy.api_server.is_up():
|
if self.proxy.public_server.is_up() or self.proxy.api_server.is_up():
|
||||||
# check for *authenticated* access to the proxy (auth token can change)
|
# check for *authenticated* access to the proxy (auth token can change)
|
||||||
try:
|
try:
|
||||||
yield self.proxy.get_routes()
|
routes = yield self.proxy.get_routes()
|
||||||
except (HTTPError, OSError, socket.error) as e:
|
except (HTTPError, OSError, socket.error) as e:
|
||||||
if isinstance(e, HTTPError) and e.code == 403:
|
if isinstance(e, HTTPError) and e.code == 403:
|
||||||
msg = "Did CONFIGPROXY_AUTH_TOKEN change?"
|
msg = "Did CONFIGPROXY_AUTH_TOKEN change?"
|
||||||
@@ -1124,6 +1124,7 @@ class JupyterHub(Application):
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.log.info("Proxy already running at: %s", self.proxy.public_server.bind_url)
|
self.log.info("Proxy already running at: %s", self.proxy.public_server.bind_url)
|
||||||
|
yield self.proxy.check_routes(self.users, self._service_map, routes)
|
||||||
self.proxy_process = None
|
self.proxy_process = None
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@@ -257,19 +257,17 @@ class Proxy(Base):
|
|||||||
user_routes = { r['user'] for r in routes.values() if 'user' in r }
|
user_routes = { r['user'] for r in routes.values() if 'user' in r }
|
||||||
futures = []
|
futures = []
|
||||||
db = inspect(self).session
|
db = inspect(self).session
|
||||||
for orm_user in db.query(User).filter(User.server != None):
|
for orm_user in db.query(User):
|
||||||
user = user_dict[orm_user]
|
user = user_dict[orm_user]
|
||||||
if not user.running:
|
if user.running:
|
||||||
# Don't add users to the proxy that haven't finished starting
|
if user.name not in user_routes:
|
||||||
continue
|
self.log.warning("Adding missing route for %s (%s)", user.name, user.server)
|
||||||
if user.server is None:
|
futures.append(self.add_user(user))
|
||||||
# This should never be True, but seems to be on rare occasion.
|
else:
|
||||||
# catch filter bug, either in sqlalchemy or my understanding of its behavior
|
# User not running, make sure it's not in the table
|
||||||
self.log.error("User %s has no server, but wasn't filtered out.", user)
|
if user.name in user_routes:
|
||||||
continue
|
self.log.warning("Removing route for not running %s", user.name)
|
||||||
if user.name not in user_routes:
|
futures.append(self.delete_user(user))
|
||||||
self.log.warning("Adding missing route for %s (%s)", user.name, user.server)
|
|
||||||
futures.append(self.add_user(user))
|
|
||||||
|
|
||||||
# check service routes
|
# check service routes
|
||||||
service_routes = { r['service'] for r in routes.values() if 'service' in r }
|
service_routes = { r['service'] for r in routes.values() if 'service' in r }
|
||||||
|
@@ -161,9 +161,9 @@ class User(HasTraits):
|
|||||||
@property
|
@property
|
||||||
def proxy_path(self):
|
def proxy_path(self):
|
||||||
if self.settings.get('subdomain_host'):
|
if self.settings.get('subdomain_host'):
|
||||||
return url_path_join('/' + self.domain, self.server.base_url)
|
return url_path_join('/' + self.domain, self.base_url)
|
||||||
else:
|
else:
|
||||||
return self.server.base_url
|
return self.base_url
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def domain(self):
|
def domain(self):
|
||||||
|
Reference in New Issue
Block a user