mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-08 17:11:42 +00:00
Fail hard on unexpected HTTP errors
In the CI train we sometimes run into transient "HTTP Error 502: Proxy Error". As we don't keep a results.cache there, this leads to retrying tests for which we already have a result in swift, but can't download it. Treat this as a hard failure now, to let the next britney run try again. This will also tell us if we need to handle any other status code than 200, 204 (empty result), or 401 (container does not exist).
This commit is contained in:
parent
d395524307
commit
b5fd32ec7b
@ -22,6 +22,7 @@ import json
|
|||||||
import tarfile
|
import tarfile
|
||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
|
|
||||||
@ -340,14 +341,23 @@ class AutoPackageTest(object):
|
|||||||
elif f.getcode() == 204: # No content
|
elif f.getcode() == 204: # No content
|
||||||
result_paths = []
|
result_paths = []
|
||||||
else:
|
else:
|
||||||
self.log_error('Failure to fetch swift results from %s: %u' %
|
# we should not ever end up here as we expect a HTTPError in
|
||||||
|
# other cases; e. g. 3XX is something that tells us to adjust
|
||||||
|
# our URLS, so fail hard on those
|
||||||
|
raise NotImplementedError('fetch_swift_results(%s): cannot handle HTTP code %i' %
|
||||||
(url, f.getcode()))
|
(url, f.getcode()))
|
||||||
f.close()
|
f.close()
|
||||||
return
|
|
||||||
f.close()
|
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
self.log_error('Failure to fetch swift results from %s: %s' % (url, str(e)))
|
# 401 "Unauthorized" is swift's way of saying "container does not exist"
|
||||||
|
if hasattr(e, 'code') and e.code == 401:
|
||||||
|
self.log_verbose('fetch_swift_results: %s does not exist yet or is inaccessible' % url)
|
||||||
return
|
return
|
||||||
|
# Other status codes are usually a transient
|
||||||
|
# network/infrastructure failure. Ignoring this can lead to
|
||||||
|
# re-requesting tests which we already have results for, so
|
||||||
|
# fail hard on this and let the next run retry.
|
||||||
|
self.log_error('FATAL: Failure to fetch swift results from %s: %s' % (url, str(e)))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
for p in result_paths:
|
for p in result_paths:
|
||||||
self.fetch_one_result(
|
self.fetch_one_result(
|
||||||
@ -366,11 +376,11 @@ class AutoPackageTest(object):
|
|||||||
tar_bytes = io.BytesIO(f.read())
|
tar_bytes = io.BytesIO(f.read())
|
||||||
f.close()
|
f.close()
|
||||||
else:
|
else:
|
||||||
self.log_error('Failure to fetch %s: %u' % (url, f.getcode()))
|
raise NotImplementedError('fetch_one_result(%s): cannot handle HTTP code %i' %
|
||||||
return
|
(url, f.getcode()))
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
self.log_error('Failure to fetch %s: %s' % (url, str(e)))
|
self.log_error('FATAL: Failure to fetch %s: %s' % (url, str(e)))
|
||||||
return
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with tarfile.open(None, 'r', tar_bytes) as tar:
|
with tarfile.open(None, 'r', tar_bytes) as tar:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user