Merge "The status_reason always exists"

This commit is contained in:
Jenkins 2017-04-14 16:32:52 +00:00 committed by Gerrit Code Review
commit ffbad00b50
4 changed files with 33 additions and 8 deletions

View File

@ -284,10 +284,12 @@ class Manager(object):
with excutils.save_and_reraise_exception(reraise=reraise):
LOG.error("Error occurred while calling Docker pause API: %s",
six.text_type(e))
self._fail_container(context, container, six.text_type(e))
except Exception as e:
with excutils.save_and_reraise_exception(reraise=reraise):
LOG.exception("Unexpected exception: %s,",
six.text_type(e))
self._fail_container(context, container, six.text_type(e))
def container_pause(self, context, container):
utils.spawn_n(self._do_container_pause, context, container)
@ -303,10 +305,12 @@ class Manager(object):
LOG.error(
"Error occurred while calling Docker unpause API: %s",
six.text_type(e))
self._fail_container(context, container, six.text_type(e))
except Exception as e:
with excutils.save_and_reraise_exception(reraise=reraise):
LOG.exception("Unexpected exception: %s",
six.text_type(e))
self._fail_container(context, container, six.text_type(e))
def container_unpause(self, context, container):
utils.spawn_n(self._do_container_unpause, context, container)
@ -369,6 +373,7 @@ class Manager(object):
with excutils.save_and_reraise_exception(reraise=reraise):
LOG.error("Error occurred while calling Docker kill API: %s",
six.text_type(e))
self._fail_container(context, container, six.text_type(e))
def container_kill(self, context, container, signal):
utils.spawn_n(self._do_container_kill, context, container, signal)

View File

@ -97,6 +97,7 @@ class DockerDriver(driver.ContainerDriver):
response = docker.create_container(image, **kwargs)
container.container_id = response['Id']
container.status = consts.CREATED
container.status_reason = None
container.save(context)
return container
@ -127,6 +128,7 @@ class DockerDriver(driver.ContainerDriver):
except errors.APIError as api_error:
if '404' in str(api_error):
container.status = consts.ERROR
container.status_reason = six.text_type(api_error)
return container
raise
@ -225,6 +227,7 @@ class DockerDriver(driver.ContainerDriver):
else:
docker.restart(container.container_id)
container.status = consts.RUNNING
container.status_reason = None
return container
@check_container_id
@ -236,6 +239,7 @@ class DockerDriver(driver.ContainerDriver):
else:
docker.stop(container.container_id)
container.status = consts.STOPPED
container.status_reason = None
return container
@check_container_id
@ -243,6 +247,7 @@ class DockerDriver(driver.ContainerDriver):
with docker_utils.docker_client() as docker:
docker.start(container.container_id)
container.status = consts.RUNNING
container.status_reason = None
return container
@check_container_id
@ -250,6 +255,7 @@ class DockerDriver(driver.ContainerDriver):
with docker_utils.docker_client() as docker:
docker.pause(container.container_id)
container.status = consts.PAUSED
container.status_reason = None
return container
@check_container_id
@ -257,6 +263,7 @@ class DockerDriver(driver.ContainerDriver):
with docker_utils.docker_client() as docker:
docker.unpause(container.container_id)
container.status = consts.RUNNING
container.status_reason = None
return container
@check_container_id
@ -326,6 +333,7 @@ class DockerDriver(driver.ContainerDriver):
except errors.APIError as api_error:
if '404' in str(api_error):
container.status = consts.ERROR
container.status_reason = six.text_type(api_error)
return container
raise

View File

@ -349,13 +349,17 @@ class TestManager(base.TestCase):
self.compute_manager._do_container_pause(self.context, container)
mock_pause.assert_called_once_with(container)
@mock.patch.object(manager.Manager, '_fail_container')
@mock.patch.object(fake_driver, 'pause')
def test_container_pause_failed(self, mock_pause):
def test_container_pause_failed(self, mock_pause, mock_fail):
container = Container(self.context, **utils.get_test_container())
mock_pause.side_effect = exception.DockerError
mock_pause.side_effect = exception.DockerError(
message="Docker Error occurred")
self.assertRaises(exception.DockerError,
self.compute_manager._do_container_pause,
self.context, container, reraise=True)
mock_fail.assert_called_with(self.context,
container, 'Docker Error occurred')
@mock.patch.object(fake_driver, 'unpause')
def test_container_unpause(self, mock_unpause):
@ -363,13 +367,17 @@ class TestManager(base.TestCase):
self.compute_manager._do_container_unpause(self.context, container)
mock_unpause.assert_called_once_with(container)
@mock.patch.object(manager.Manager, '_fail_container')
@mock.patch.object(fake_driver, 'unpause')
def test_container_unpause_failed(self, mock_unpause):
def test_container_unpause_failed(self, mock_unpause, mock_fail):
container = Container(self.context, **utils.get_test_container())
mock_unpause.side_effect = exception.DockerError
mock_unpause.side_effect = exception.DockerError(
message="Docker Error occurred")
self.assertRaises(exception.DockerError,
self.compute_manager._do_container_unpause,
self.context, container, reraise=True)
mock_fail.assert_called_with(self.context,
container, 'Docker Error occurred')
@mock.patch.object(fake_driver, 'show_logs')
def test_container_logs(self, mock_logs):
@ -415,13 +423,17 @@ class TestManager(base.TestCase):
self.compute_manager._do_container_kill(self.context, container, None)
mock_kill.assert_called_once_with(container, None)
@mock.patch.object(manager.Manager, '_fail_container')
@mock.patch.object(fake_driver, 'kill')
def test_container_kill_failed(self, mock_kill):
def test_container_kill_failed(self, mock_kill, mock_fail):
container = Container(self.context, **utils.get_test_container())
mock_kill.side_effect = exception.DockerError
mock_kill.side_effect = exception.DockerError(
message="Docker Error occurred")
self.assertRaises(exception.DockerError,
self.compute_manager._do_container_kill,
self.context, container, None, reraise=True)
mock_fail.assert_called_with(self.context,
container, 'Docker Error occurred')
@mock.patch.object(Container, 'save')
@mock.patch.object(fake_driver, 'update')

View File

@ -170,7 +170,7 @@ class TestDockerDriver(base.DriverTestCase):
mock_container.container_id)
self.assertEqual(result_container.status,
consts.ERROR)
self.assertEqual(1, mock_init.call_count)
self.assertEqual(2, mock_init.call_count)
def test_show_fail_api_error(self):
with mock.patch.object(errors.APIError, '__str__',
@ -291,7 +291,7 @@ class TestDockerDriver(base.DriverTestCase):
mock_container.container_id)
self.assertEqual(result_container.status,
consts.ERROR)
self.assertEqual(1, mock_init.call_count)
self.assertEqual(2, mock_init.call_count)
def test_kill_fail_api_error(self):
with mock.patch.object(errors.APIError, '__str__',