From 0d656aa1e1fcc04ea2ffab5068aa934784c88f64 Mon Sep 17 00:00:00 2001 From: Loan Harrouin Date: Tue, 5 May 2026 15:58:39 +0200 Subject: Fix Docker cpuset dimension comparison When enabling cpuset_cpus or cpuset_mems on existing Docker containers, Docker may report the current value as an empty string when no cpuset constraint is configured. These dimensions are cpuset-list strings, not numeric resource values. Compare them as strings in the Docker worker instead of passing them through the numeric dimension comparison logic. Closes-Bug: 2143874 Change-Id: I1b8cd72846b28f556c8f9a0ba114a8af9221e85a Signed-off-by: Loan Harrouin (cherry picked from commit 8304bb3884237bf5aee1c60715d097e88561d56d) --- tests/kolla_container_tests/test_docker_worker.py | 54 +++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tests') diff --git a/tests/kolla_container_tests/test_docker_worker.py b/tests/kolla_container_tests/test_docker_worker.py index 26fe020f2..cd351e4ef 100644 --- a/tests/kolla_container_tests/test_docker_worker.py +++ b/tests/kolla_container_tests/test_docker_worker.py @@ -1500,6 +1500,60 @@ class TestAttrComp(base.BaseTestCase): failed=True, msg=repr("Unsupported dimensions"), unsupported_dimensions=set(['kernel_memory'])) + def test_compare_dimensions_cpuset_cpus_empty_current(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_cpus': '0-1,32-33'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetCpus': ''} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertTrue(self.dw.compare_dimensions(container_info)) + + def test_compare_dimensions_cpuset_cpus_same(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_cpus': '0-1,32-33'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetCpus': '0-1,32-33'} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertFalse(self.dw.compare_dimensions(container_info)) + + def test_compare_dimensions_cpuset_cpus_different(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_cpus': '0-1,32-33'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetCpus': '0-3'} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertTrue(self.dw.compare_dimensions(container_info)) + + def test_compare_dimensions_cpuset_mems_empty_current(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_mems': '0'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetMems': ''} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertTrue(self.dw.compare_dimensions(container_info)) + + def test_compare_dimensions_cpuset_mems_same(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_mems': '0'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetMems': '0'} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertFalse(self.dw.compare_dimensions(container_info)) + + def test_compare_dimensions_cpuset_mems_different(self): + self.fake_data['params']['dimensions'] = { + 'cpuset_mems': '0'} + container_info = dict() + container_info['HostConfig'] = { + 'CpusetMems': '1'} + self.dw = get_DockerWorker(self.fake_data['params']) + self.assertTrue(self.dw.compare_dimensions(container_info)) + def test_compare_container_state_pos(self): container_info = {'State': dict(Status='running')} self.dw = get_DockerWorker({'state': 'exited'}) -- cgit v1.2.3