From dbc520222fffc1e061cf1059e41f41a1d9c785a9 Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Mon, 28 Jan 2013 21:26:57 -0800 Subject: [PATCH] health: Fail health check if specific file is present. This lets us mark a server dead in the load balancer. --- r2/r2/controllers/error.py | 4 +++- r2/r2/controllers/health.py | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/r2/r2/controllers/error.py b/r2/r2/controllers/error.py index 78cd8b074..462a3af6a 100644 --- a/r2/r2/controllers/error.py +++ b/r2/r2/controllers/error.py @@ -147,7 +147,9 @@ class ErrorController(RedditController): return template.render(logo_url=static(g.default_header_url)) def send503(self): - response.headers["Retry-After"] = str(request.environ["retry_after"]) + retry_after = request.environ.get("retry_after") + if retry_after: + response.headers["Retry-After"] = str(retry_after) return request.environ['usable_error_content'] def GET_document(self): diff --git a/r2/r2/controllers/health.py b/r2/r2/controllers/health.py index 6f83c5554..ba768f034 100644 --- a/r2/r2/controllers/health.py +++ b/r2/r2/controllers/health.py @@ -21,8 +21,10 @@ ############################################################################### import json +import os -from pylons import g, response +from pylons import g, request, response +from pylons.controllers.util import abort from r2.controllers.reddit_base import MinimalController from r2.lib import promote @@ -39,6 +41,10 @@ class HealthController(MinimalController): pass def GET_health(self): + if os.path.exists("/var/opt/reddit/quiesce"): + request.environ["usable_error_content"] = "No thanks, I'm full." + abort(503) + response.content_type = "application/json" return json.dumps(g.versions, sort_keys=True, indent=4)