From 9205710912fbd72948243734e0f0ed4b8464be35 Mon Sep 17 00:00:00 2001 From: Hongbin Lu Date: Sat, 13 Apr 2019 19:10:09 +0000 Subject: [PATCH] Skip populating container's state on tasks If there is a task acting on this container, skip syncing its state on _populate_container_state to avoid conflicts. Change-Id: I8b1bcc6c0399b163e26619db893b118f93d6ba9a --- zun/container/docker/driver.py | 5 +++++ zun/tests/unit/container/docker/test_docker_driver.py | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/zun/container/docker/driver.py b/zun/container/docker/driver.py index 6b1bef752..6aaddb0b3 100644 --- a/zun/container/docker/driver.py +++ b/zun/container/docker/driver.py @@ -633,6 +633,11 @@ class DockerDriver(driver.ContainerDriver): container.runtime = hostconfig.get('Runtime') def _populate_container_state(self, container, state): + if container.task_state: + # NOTE(hongbin): we don't want to populate container state + # if another thread is doing task on this container. + return + if not state: LOG.warning('Receive unexpected state from docker: %s', state) container.status = consts.UNKNOWN diff --git a/zun/tests/unit/container/docker/test_docker_driver.py b/zun/tests/unit/container/docker/test_docker_driver.py index e19452b03..60f541dcf 100644 --- a/zun/tests/unit/container/docker/test_docker_driver.py +++ b/zun/tests/unit/container/docker/test_docker_driver.py @@ -553,7 +553,7 @@ class TestDockerDriver(base.DriverTestCase): self.mock_docker.inspect_container = mock.Mock( return_value={'State': 'created', 'Config': {'Cmd': ['fake_command']}}) - mock_container = mock.MagicMock() + mock_container = mock.MagicMock(task_state=None) mock_container.status = consts.CREATING self.driver.show(self.context, mock_container) self.mock_docker.inspect_container.assert_called_once_with( @@ -598,8 +598,8 @@ class TestDockerDriver(base.DriverTestCase): 'FinishedAt': '0001-01-01T00:00:00Z', }} ) - mock_container = mock.MagicMock() - mock_container.status = 'existed' + mock_container = mock.MagicMock(task_state=None) + mock_container.status = 'Created' mock_container.Error = 'Container start error.' self.driver.show(self.context, mock_container) self.mock_docker.inspect_container.assert_called_once_with( @@ -615,8 +615,8 @@ class TestDockerDriver(base.DriverTestCase): 'FinishedAt': '0001-01-01T00:00:00Z', }} ) - mock_container = mock.MagicMock() - mock_container.status = 'UNKNOWN' + mock_container = mock.MagicMock(task_state=None) + mock_container.status = 'Running' mock_container.Error = 'Container run error.' self.driver.show(self.context, mock_container) self.mock_docker.inspect_container.assert_called_once_with(