sourceppa: Retry 5 times on HTTP 503s

We get these quite frequently from the LP API - have a few attempts.
master
Iain Lane 7 years ago
parent 41d51369f5
commit 9661362880

@ -5,6 +5,7 @@ import urllib.request
import urllib.parse
from collections import defaultdict
from urllib.error import HTTPError
from britney2.policies.policy import BasePolicy, PolicyVerdict
@ -65,6 +66,17 @@ class SourcePPAPolicy(BasePolicy):
return self.query_lp_rest_api(obj, query, retries - 1)
else:
raise
except HTTPError as e:
if e.code != 503:
raise
# 503s are transient
if retries > 1:
self.log("Caught error 503 downloading '%s', will retry %d more times."
% (url, retries))
return self.query_lp_rest_api(obj, query, retries - 1)
else:
raise
def lp_get_source_ppa(self, pkg, version):
"""Ask LP what source PPA pkg was copied from"""

@ -109,6 +109,21 @@ class T(unittest.TestCase):
pol.lp_get_source_ppa('hello', '1.0')
self.assertEqual(urlopen.call_count, 5)
@patch('britney2.policies.sourceppa.urllib.request.urlopen')
def test_lp_rest_api_unavailable(self, urlopen):
"""If we get a 503 connecting to LP, we try 5 times"""
from urllib.error import HTTPError
# test that we're retried 5 times on 503
urlopen.side_effect = HTTPError(None,
503,
'Service Temporarily Unavailable',
None,
None)
pol = SourcePPAPolicy(FakeOptions, {})
with self.assertRaises(HTTPError):
pol.lp_get_source_ppa('hello', '1.0')
self.assertEqual(urlopen.call_count, 5)
def test_approve_ppa(self):
"""Approve packages by their PPA."""
shortppa = 'team/ubuntu/ppa'

Loading…
Cancel
Save