mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-03 14:41:30 +00:00
autopkgtest: Retry downloads
If we have a slightly flaky network / endpoint, retrying can help us to keep going rather than crash & restart.
This commit is contained in:
parent
73a6e7ff81
commit
6bea01106f
@ -27,9 +27,11 @@ import tarfile
|
|||||||
import io
|
import io
|
||||||
import itertools
|
import itertools
|
||||||
import re
|
import re
|
||||||
|
import socket
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
from urllib.error import HTTPError
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
|
|
||||||
import apt_pkg
|
import apt_pkg
|
||||||
@ -773,6 +775,30 @@ class AutopkgtestPolicy(BasePolicy):
|
|||||||
|
|
||||||
latest_run_for_package._cache = collections.defaultdict(dict)
|
latest_run_for_package._cache = collections.defaultdict(dict)
|
||||||
|
|
||||||
|
def download_retry(self, url):
|
||||||
|
for retry in range(5):
|
||||||
|
try:
|
||||||
|
req = urlopen(url, timeout=30)
|
||||||
|
code = req.getcode()
|
||||||
|
if 200 <= code < 300:
|
||||||
|
return req
|
||||||
|
except socket.timeout as e:
|
||||||
|
self.logger.info(
|
||||||
|
"Timeout downloading '%s', will retry %d more times."
|
||||||
|
% (url, 5 - retry - 1)
|
||||||
|
)
|
||||||
|
exc = e
|
||||||
|
except HTTPError as e:
|
||||||
|
if e.code not in (503, 502):
|
||||||
|
raise
|
||||||
|
self.logger.info(
|
||||||
|
"Caught error %d downloading '%s', will retry %d more times."
|
||||||
|
% (e.code, url, 5 - retry - 1)
|
||||||
|
)
|
||||||
|
exc = e
|
||||||
|
else:
|
||||||
|
raise exc
|
||||||
|
|
||||||
def fetch_swift_results(self, swift_url, src, arch):
|
def fetch_swift_results(self, swift_url, src, arch):
|
||||||
'''Download new results for source package/arch from swift'''
|
'''Download new results for source package/arch from swift'''
|
||||||
|
|
||||||
@ -801,7 +827,7 @@ class AutopkgtestPolicy(BasePolicy):
|
|||||||
url += '?' + urllib.parse.urlencode(query)
|
url += '?' + urllib.parse.urlencode(query)
|
||||||
f = None
|
f = None
|
||||||
try:
|
try:
|
||||||
f = urlopen(url, timeout=30)
|
f = self.download_retry(url)
|
||||||
if f.getcode() == 200:
|
if f.getcode() == 200:
|
||||||
result_paths = f.read().decode().strip().splitlines()
|
result_paths = f.read().decode().strip().splitlines()
|
||||||
elif f.getcode() == 204: # No content
|
elif f.getcode() == 204: # No content
|
||||||
@ -840,7 +866,7 @@ class AutopkgtestPolicy(BasePolicy):
|
|||||||
'''
|
'''
|
||||||
f = None
|
f = None
|
||||||
try:
|
try:
|
||||||
f = urlopen(url, timeout=30)
|
f = self.download_retry(url)
|
||||||
if f.getcode() == 200:
|
if f.getcode() == 200:
|
||||||
tar_bytes = io.BytesIO(f.read())
|
tar_bytes = io.BytesIO(f.read())
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user