summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-02-02 18:33:15 +0000
committerGerrit Code Review <review@openstack.org>2015-02-02 18:33:15 +0000
commit90e784773f9326c05d390ea16a1a9ce41462f8fe (patch)
tree3ea2fafd1c770c40f1b266b3b9f2e5a168c042bf
parentae86c8d09272cbf591ef2d2760b8ca4a56df0ee2 (diff)
parent8833f69693e026d43f579cfa9839d45ce4e3fb8d (diff)
downloadironic-90e784773f9326c05d390ea16a1a9ce41462f8fe.tar.gz
Merge "Fix RPCService and Ironic Conductor so they shut down gracefully" into stable/juno
-rw-r--r--ironic/common/service.py3
-rw-r--r--ironic/conductor/manager.py4
-rw-r--r--ironic/tests/conductor/test_manager.py6
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):