From 95ef1e52fc48321f5d00c963432c707da54ff97f Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Tue, 24 Jul 2018 13:49:31 -0400 Subject: [PATCH] Always start convergence worker service The purpose of the cfg.CONF.convergence_engine option is to determine whether new stacks will be created using convergence or not. For some reason, however, the worker service was not started when the option was disabled, meaning that previously-created convergence stacks could no longer be updated (there was a hack in place to allow them to be deleted). Always start the worker service and continue operating any existing convergence stacks in convergence mode, regardless of the current setting for new stacks. Change-Id: Ic3574e4d15ac48b2bc8e0e8101c81d24f40f0606 Related-Bug: #1508324 --- heat/engine/service.py | 20 +++++++++---------- .../engine/service/test_service_engine.py | 9 ++++++--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/heat/engine/service.py b/heat/engine/service.py index 0101e5e3cf..cffcbeffad 100644 --- a/heat/engine/service.py +++ b/heat/engine/service.py @@ -345,14 +345,13 @@ class EngineService(service.ServiceBase): LOG.debug("Starting listener for engine %s", self.engine_id) self.listener.start() - if cfg.CONF.convergence_engine: - self.worker_service = worker.WorkerService( - host=self.host, - topic=rpc_worker_api.TOPIC, - engine_id=self.engine_id, - thread_group_mgr=self.thread_group_mgr - ) - self.worker_service.start() + self.worker_service = worker.WorkerService( + host=self.host, + topic=rpc_worker_api.TOPIC, + engine_id=self.engine_id, + thread_group_mgr=self.thread_group_mgr + ) + self.worker_service.start() target = messaging.Target( version=self.RPC_API_VERSION, server=self.host, @@ -401,8 +400,7 @@ class EngineService(service.ServiceBase): if self.listener: self.listener.stop() - if cfg.CONF.convergence_engine and self.worker_service: - # Stop the WorkerService + if self.worker_service: self.worker_service.stop() # Wait for all active threads to be finished @@ -1373,7 +1371,7 @@ class EngineService(service.ServiceBase): stack = parser.Stack.load(cnxt, stack=st) self.resource_enforcer.enforce_stack(stack, is_registered_policy=True) - if stack.convergence and cfg.CONF.convergence_engine: + if stack.convergence: stack.thread_group_mgr = self.thread_group_mgr template = templatem.Template.create_empty_template( from_template=stack.t) diff --git a/heat/tests/engine/service/test_service_engine.py b/heat/tests/engine/service/test_service_engine.py index a66e8e0ded..421c2e3598 100644 --- a/heat/tests/engine/service/test_service_engine.py +++ b/heat/tests/engine/service/test_service_engine.py @@ -227,6 +227,8 @@ class ServiceEngineTest(common.HeatTestCase): return_value=mock.Mock()) @mock.patch('heat.engine.service.EngineListener', return_value=mock.Mock()) + @mock.patch('heat.engine.worker.WorkerService', + return_value=mock.Mock()) @mock.patch('oslo_service.threadgroup.ThreadGroup', return_value=mock.Mock()) @mock.patch.object(service.EngineService, '_configure_db_conn_pool_size') @@ -234,16 +236,17 @@ class ServiceEngineTest(common.HeatTestCase): self, configure_db_conn_pool_size, thread_group_class, + worker_service_class, engine_listener_class, thread_group_manager_class, sample_uuid_method, rpc_client_class, target_class, rpc_server_method): - cfg.CONF.set_default('convergence_engine', False) + cfg.CONF.set_override('convergence_engine', False) self._test_engine_service_start( thread_group_class, - None, + worker_service_class, engine_listener_class, thread_group_manager_class, sample_uuid_method, @@ -280,7 +283,7 @@ class ServiceEngineTest(common.HeatTestCase): rpc_client_class, target_class, rpc_server_method): - cfg.CONF.set_default('convergence_engine', True) + cfg.CONF.set_override('convergence_engine', True) self._test_engine_service_start( thread_group_class, worker_service_class,