mirror of https://github.com/docker/docker-py.git
Stop timeout should be added to the request timeout
Using the max of the stop timeout and request timeout did not entirely make sure that a stop timeout greater than a request timeout wouldn't fail prematurely with a HTTPTimeout exception. The correct behavior is to add the timeouts together, as the stop timeout is understood to be part of the "request processing time". Any transport-level timeout thus comes in addition to that. Signed-off-by: Maxime Petazzoni <max@signalfuse.com>
This commit is contained in:
parent
698732636c
commit
97366f6b60
|
@ -873,7 +873,7 @@ class Client(requests.Session):
|
||||||
params = {'t': timeout}
|
params = {'t': timeout}
|
||||||
url = self._url("/containers/{0}/stop".format(container))
|
url = self._url("/containers/{0}/stop".format(container))
|
||||||
res = self._post(url, params=params,
|
res = self._post(url, params=params,
|
||||||
timeout=max(timeout, self._timeout))
|
timeout=(timeout + self._timeout))
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
||||||
def tag(self, image, repository, tag=None, force=False):
|
def tag(self, image, repository, tag=None, force=False):
|
||||||
|
|
|
@ -934,27 +934,30 @@ class DockerClientTest(Cleanup, unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_stop_container(self):
|
def test_stop_container(self):
|
||||||
|
timeout = 2
|
||||||
try:
|
try:
|
||||||
self.client.stop(fake_api.FAKE_CONTAINER_ID, timeout=2)
|
self.client.stop(fake_api.FAKE_CONTAINER_ID, timeout=timeout)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
url_prefix + 'containers/3cc2351ab11b/stop',
|
url_prefix + 'containers/3cc2351ab11b/stop',
|
||||||
params={'t': 2},
|
params={'t': timeout},
|
||||||
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
timeout=(docker.client.DEFAULT_TIMEOUT_SECONDS + timeout)
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_stop_container_with_dict_instead_of_id(self):
|
def test_stop_container_with_dict_instead_of_id(self):
|
||||||
|
timeout = 2
|
||||||
try:
|
try:
|
||||||
self.client.stop({'Id': fake_api.FAKE_CONTAINER_ID}, timeout=2)
|
self.client.stop({'Id': fake_api.FAKE_CONTAINER_ID},
|
||||||
|
timeout=timeout)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.fail('Command should not raise exception: {0}'.format(e))
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
|
||||||
fake_request.assert_called_with(
|
fake_request.assert_called_with(
|
||||||
url_prefix + 'containers/3cc2351ab11b/stop',
|
url_prefix + 'containers/3cc2351ab11b/stop',
|
||||||
params={'t': 2},
|
params={'t': timeout},
|
||||||
timeout=docker.client.DEFAULT_TIMEOUT_SECONDS
|
timeout=(docker.client.DEFAULT_TIMEOUT_SECONDS + timeout)
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_kill_container(self):
|
def test_kill_container(self):
|
||||||
|
|
Loading…
Reference in New Issue