diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-02-02 18:33:15 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-02-02 18:33:15 +0000 |
commit | 90e784773f9326c05d390ea16a1a9ce41462f8fe (patch) | |
tree | 3ea2fafd1c770c40f1b266b3b9f2e5a168c042bf | |
parent | ae86c8d09272cbf591ef2d2760b8ca4a56df0ee2 (diff) | |
parent | 8833f69693e026d43f579cfa9839d45ce4e3fb8d (diff) | |
download | ironic-90e784773f9326c05d390ea16a1a9ce41462f8fe.tar.gz |
Merge "Fix RPCService and Ironic Conductor so they shut down gracefully" into stable/juno
-rw-r--r-- | ironic/common/service.py | 3 | ||||
-rw-r--r-- | ironic/conductor/manager.py | 4 | ||||
-rw-r--r-- | ironic/tests/conductor/test_manager.py | 6 |
3 files changed, 12 insertions, 1 deletions
diff --git a/ironic/common/service.py b/ironic/common/service.py index 1d7722ee9..32c869ceb 100644 --- a/ironic/common/service.py +++ b/ironic/common/service.py @@ -80,7 +80,6 @@ class RPCService(service.Service): {'service': self.topic, 'host': self.host}) def stop(self): - super(RPCService, self).stop() try: self.rpcserver.stop() self.rpcserver.wait() @@ -92,6 +91,8 @@ class RPCService(service.Service): except Exception as e: LOG.exception(_LE('Service error occurred when cleaning up ' 'the RPC manager. Error: %s'), e) + + super(RPCService, self).stop(graceful=True) LOG.info(_LI('Stopped RPC server for service %(service)s on host ' '%(host)s.'), {'service': self.topic, 'host': self.host}) diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 1328b3e4e..50e2f2ff4 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -251,6 +251,10 @@ class ConductorManager(periodic_task.PeriodicTasks): {'hostname': self.host}) except exception.ConductorNotFound: pass + # Waiting here to give workers the chance to finish. This has the + # benefit of releasing locks workers placed on nodes, as well as + # having work complete normally. + self._worker_pool.waitall() def periodic_tasks(self, context, raise_on_error=False): """Periodic tasks are run at pre-specified interval.""" diff --git a/ironic/tests/conductor/test_manager.py b/ironic/tests/conductor/test_manager.py index ca48e34ec..9cf459046 100644 --- a/ironic/tests/conductor/test_manager.py +++ b/ironic/tests/conductor/test_manager.py @@ -235,6 +235,12 @@ class StartStopTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase): self.service.init_host) self.assertTrue(log_mock.error.called) + @mock.patch.object(eventlet.greenpool.GreenPool, 'waitall') + def test_del_host_waits_on_workerpool(self, wait_mock): + self._start_service() + self.service.del_host() + self.assertTrue(wait_mock.called) + class KeepAliveTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase): def test__conductor_service_record_keepalive(self): |