Merge "Add timeout to requests.get() in kolla/cmd/build.py"

This commit is contained in:
Jenkins 2016-02-28 19:03:10 +00:00 committed by Gerrit Code Review
commit 5311f86822
3 changed files with 32 additions and 1 deletions

View File

@ -164,7 +164,14 @@ class WorkerThread(threading.Thread):
if source.get('type') == 'url':
LOG.debug("%s:Getting archive from %s", image['name'],
source['source'])
r = requests.get(source['source'])
try:
r = requests.get(source['source'], timeout=self.conf.timeout)
except requests_exc.Timeout:
LOG.exception('Request timed out while getting archive'
' from %s', source['source'])
image['status'] = "error"
image['logs'] = str()
return
if r.status_code == 200:
with open(dest_archive, 'wb') as f:

View File

@ -131,6 +131,8 @@ _CLI_OPTS = [
cfg.BoolOpt('template-only', default=False,
deprecated_group='kolla-build',
help=("Don't build images. Generate Dockerfile only")),
cfg.IntOpt('timeout', default=120,
help='Time in seconds after which any operation times out'),
]
_BASE_OPTS = [

View File

@ -14,6 +14,7 @@ import fixtures
import itertools
import mock
import os
import requests
from kolla.cmd import build
from kolla.tests import base
@ -106,6 +107,27 @@ class WorkerThreadTest(base.TestCase):
nocache=False, rm=True, pull=True, forcerm=True,
buildargs=build_args)
@mock.patch('docker.Client')
@mock.patch('requests.get')
def test_requests_get_timeout(self, mock_get, mock_client):
worker = build.WorkerThread(mock.Mock(),
mock.Mock(),
self.conf)
self.image['source'] = {
'source': 'http://fake/source',
'type': 'url',
'name': 'fake-image-base'
}
mock_get.side_effect = requests.exceptions.Timeout
get_result = worker.process_source(self.image,
self.image['source'])
self.assertIsNone(get_result)
self.assertEqual(self.image['status'], 'error')
self.assertEqual(self.image['logs'], str())
mock_get.assert_called_once_with(self.image['source']['source'],
timeout=120)
class KollaWorkerTest(base.TestCase):