mirror of
				https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
				synced 2025-10-31 16:44:13 +00:00 
			
		
		
		
	autopkgtest: Re-use the HTTP connection between requests to swift
This requires porting to python3-requests, as requests has built-in Keep-Alive support.
This commit is contained in:
		
							parent
							
								
									b9747f3b23
								
							
						
					
					
						commit
						63324d48a8
					
				| @ -24,7 +24,7 @@ import io | ||||
| import re | ||||
| import sys | ||||
| import urllib.parse | ||||
| from urllib.request import urlopen | ||||
| import requests | ||||
| 
 | ||||
| import apt_pkg | ||||
| import amqplib.client_0_8 as amqp | ||||
| @ -84,6 +84,8 @@ class AutopkgtestPolicy(BasePolicy): | ||||
|         else: | ||||
|             self.results_cache_file = os.path.join(self.test_state_dir, 'results.cache') | ||||
| 
 | ||||
|         self.session = requests.Session() | ||||
| 
 | ||||
|         try: | ||||
|             self.options.adt_ppas = self.options.adt_ppas.strip().split() | ||||
|         except AttributeError: | ||||
| @ -484,29 +486,22 @@ class AutopkgtestPolicy(BasePolicy): | ||||
|         # request new results from swift | ||||
|         url = os.path.join(swift_url, self.swift_container) | ||||
|         url += '?' + urllib.parse.urlencode(query) | ||||
|         try: | ||||
|             f = urlopen(url, timeout=30) | ||||
|             if f.getcode() == 200: | ||||
|                 result_paths = f.read().decode().strip().splitlines() | ||||
|             elif f.getcode() == 204:  # No content | ||||
|                 result_paths = [] | ||||
|             else: | ||||
|                 # 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())) | ||||
|             f.close() | ||||
|         except IOError as e: | ||||
| 
 | ||||
|         resp = self.session.get(url, timeout=30) | ||||
|         if resp.status_code == 200: | ||||
|             result_paths = resp.text.strip().splitlines() | ||||
|         elif resp.status_code == 204:  # No content | ||||
|             result_paths = [] | ||||
|         elif resp.status_code == 401: | ||||
|             # 401 "Unauthorized" is swift's way of saying "container does not exist" | ||||
|             if hasattr(e, 'code') and e.code == 401: | ||||
|                 self.log('fetch_swift_results: %s does not exist yet or is inaccessible' % url) | ||||
|                 return | ||||
|             self.log('fetch_swift_results: %s does not exist yet or is inaccessible' % url) | ||||
|             return | ||||
|         else: | ||||
|             # 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('FATAL: Failure to fetch swift results from %s: %s' % (url, str(e)), 'E') | ||||
|             self.log('FATAL: Failure to fetch swift results from %s: got error code %s' % (url, resp.status_code)) | ||||
|             sys.exit(1) | ||||
| 
 | ||||
|         for p in result_paths: | ||||
| @ -520,20 +515,15 @@ class AutopkgtestPolicy(BasePolicy): | ||||
| 
 | ||||
|         Remove matching pending_tests entries. | ||||
|         ''' | ||||
|         try: | ||||
|             f = urlopen(url, timeout=30) | ||||
|             if f.getcode() == 200: | ||||
|                 tar_bytes = io.BytesIO(f.read()) | ||||
|                 f.close() | ||||
|             else: | ||||
|                 raise NotImplementedError('fetch_one_result(%s): cannot handle HTTP code %i' % | ||||
|                                           (url, f.getcode())) | ||||
|         except IOError as e: | ||||
|             self.log('Failure to fetch %s: %s' % (url, str(e)), 'E') | ||||
|             # we tolerate "not found" (something went wrong on uploading the | ||||
|             # result), but other things indicate infrastructure problems | ||||
|             if hasattr(e, 'code') and e.code == 404: | ||||
|                 return | ||||
|         resp = self.session.get(url, timeout=30) | ||||
|         if resp.status_code == 200: | ||||
|             tar_bytes = io.BytesIO(resp.content) | ||||
|         # we tolerate "not found" (something went wrong on uploading the | ||||
|         # result), but other things indicate infrastructure problems | ||||
|         elif resp.status_code == 404: | ||||
|             return | ||||
|         else: | ||||
|             self.log('Failure to fetch %s: error code %s' % (url, resp.status_code)) | ||||
|             sys.exit(1) | ||||
| 
 | ||||
|         try: | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user