Fix conductor deregistration on non init conductor

Conductor deregistration fails if called on non initialized
conductor, e.g. when AMQP server is unreachable, it raise
Attribute error.

Change-Id: Ic550d840b69676c619ddcb7ec550b9e6c3b28ac0
Closes-Bug: 1496017
This commit is contained in:
Anton Arefiev 2015-09-21 11:16:58 +03:00
parent cbd47c4ac9
commit 36cbefefe9
2 changed files with 9 additions and 0 deletions

View File

@ -327,6 +327,10 @@ class ConductorManager(periodic_task.PeriodicTasks):
self.add_periodic_task(method)
def del_host(self, deregister=True):
# Conductor deregistration fails if called on non-initialized
# conductor (e.g. when rpc server is unreachable).
if not hasattr(self, 'conductor'):
return
self._keepalive_evt.set()
if deregister:
try:

View File

@ -211,6 +211,11 @@ class StartStopTestCase(_ServiceSetUpMixin, tests_db_base.DbTestCase):
res = objects.Conductor.get_by_hostname(self.context, self.hostname)
self.assertEqual(self.hostname, res['hostname'])
@mock.patch.object(manager.ConductorManager, 'init_host')
def test_stop_uninitialized_conductor(self, mock_init):
self._start_service()
self.service.del_host()
@mock.patch.object(driver_factory.DriverFactory, '__getitem__',
lambda *args: mock.MagicMock())
def test_start_registers_driver_names(self):