Merge "Move conductor wait_until_ready() delay before manager init" into stable/queens

This commit is contained in:
Zuul 2018-09-19 16:20:50 +00:00 committed by Gerrit Code Review
commit 6004632958
2 changed files with 18 additions and 3 deletions

View File

@ -124,6 +124,9 @@ class Service(service.Service):
self.manager_class_name = manager
self.servicegroup_api = servicegroup.API()
manager_class = importutils.import_class(self.manager_class_name)
if objects_base.NovaObject.indirection_api:
conductor_api = conductor.API()
conductor_api.wait_until_ready(context.get_admin_context())
self.manager = manager_class(host=self.host, *args, **kwargs)
self.rpcserver = None
self.report_interval = report_interval
@ -132,9 +135,6 @@ class Service(service.Service):
self.periodic_interval_max = periodic_interval_max
self.saved_args, self.saved_kwargs = args, kwargs
self.backdoor_port = None
if objects_base.NovaObject.indirection_api:
conductor_api = conductor.API()
conductor_api.wait_until_ready(context.get_admin_context())
setup_profiler(binary, self.host)
def __repr__(self):

View File

@ -27,6 +27,7 @@ import testtools
from nova import exception
from nova import manager
from nova import objects
from nova.objects import base as obj_base
from nova import rpc
from nova import service
from nova import test
@ -138,6 +139,20 @@ class ServiceTestCase(test.NoDBTestCase):
# post_start_hook is called after RPC consumer is created.
serv.manager.post_start_hook.assert_called_once_with()
@mock.patch('nova.conductor.api.API.wait_until_ready')
def test_init_with_indirection_api_waits(self, mock_wait):
obj_base.NovaObject.indirection_api = mock.MagicMock()
with mock.patch.object(FakeManager, '__init__') as init:
def check(*a, **k):
self.assertTrue(mock_wait.called)
init.side_effect = check
service.Service(self.host, self.binary, self.topic,
'nova.tests.unit.test_service.FakeManager')
self.assertTrue(init.called)
mock_wait.assert_called_once_with(mock.ANY)
@mock.patch('nova.objects.service.Service.get_by_host_and_binary')
def test_start_updates_version(self, mock_get_by_host_and_binary):
# test that the service version gets updated on services startup