From 96c688899e79693fab71463cea3021e91f6264ea Mon Sep 17 00:00:00 2001 From: Jeremy Cline Date: Jun 05 2017 14:46:01 +0000 Subject: Ensure requests are made with a timeout Without a timeout, requests will block until a response is received. This ensures a timeout is set for each request made so that if servers are slow to respond, we don't get stuck waiting forever. Signed-off-by: Jeremy Cline --- diff --git a/greenwave/api_v1.py b/greenwave/api_v1.py index 1cf96b9..30223eb 100644 --- a/greenwave/api_v1.py +++ b/greenwave/api_v1.py @@ -61,11 +61,12 @@ def make_decision(): policies_satisified = True summary = [] unsatisfied_requirements = [] + timeout = current_app.config['REQUESTS_TIMEOUT'] for policy_id, policy in applicable_policies.iteritems(): for item in subjects: - res = requests_session.get('{0}/results?item={1}&testcases={2}'.format( + url = '{0}/results?item={1}&testcases={2}'.format( current_app.config['RESULTSDB_API_URL'], item, ','.join(policy['rules'])) - ) + res = requests_session.get(url, timeout=timeout) res.raise_for_status() results = res.json()['data'] total_failed_results = 0 @@ -73,10 +74,9 @@ def make_decision(): for result in results: if result['outcome'] not in ('PASSED', 'INFO'): # query WaiverDB to check whether the result has a waiver - res = requests_session.get('{0}/waivers/?product_version={1}&result_id={2}'.format( - current_app.config['WAIVERDB_API_URL'], product_version, - result['id']) - ) + url = '{0}/waivers/?product_version={1}&result_id={2}'.format( + current_app.config['WAIVERDB_API_URL'], product_version, result['id']) + res = requests_session.get(url, timeout=timeout) res.raise_for_status() waiver = res.json()['data'] if not waiver or not waiver[0]['waived']: diff --git a/greenwave/config.py b/greenwave/config.py index 1d468f0..6038664 100644 --- a/greenwave/config.py +++ b/greenwave/config.py @@ -22,6 +22,7 @@ class Config(object): SECRET_KEY = 'replace-me-with-something-random' RESULTSDB_API_URL = 'https://taskotron.fedoraproject.org/resultsdb_api/api/v2.0' WAIVERDB_API_URL = 'https://waiverdb.fedoraproject.org/api/v1.0' + REQUESTS_TIMEOUT = (6.1, 15) class ProductionConfig(Config):