Browse Source

Merge "init_host should be called before RPC consumer is created" into stable/ussuri

changes/65/825065/1
Zuul 5 months ago committed by Gerrit Code Review
parent
commit
9fd17c0a6b
  1. 14
      manila/manager.py
  2. 2
      manila/scheduler/manager.py
  3. 4
      manila/service.py
  4. 4
      manila/tests/scheduler/test_manager.py
  5. 6
      releasenotes/notes/bug-1271568-fix-rpc-init-host-with-rpc-6e76afa553b4f2af.yaml

14
manila/manager.py

@ -101,7 +101,19 @@ class Manager(base.Base, PeriodicTasks):
def init_host(self):
"""Handle initialization if this is a standalone service.
Child classes should override this method.
A hook point for services to execute tasks before the services are made
available (i.e. showing up on RPC and starting to accept RPC calls) to
other components. Child classes should override this method.
"""
pass
def init_host_with_rpc(self):
"""A hook for service to do jobs after RPC is ready.
Like init_host(), this method is a hook where services get a chance
to execute tasks that *need* RPC. Child classes should override
this method.
"""
pass

2
manila/scheduler/manager.py

@ -83,7 +83,7 @@ class SchedulerManager(manager.Manager):
self.message_api = message_api.API()
super(SchedulerManager, self).__init__(*args, **kwargs)
def init_host(self):
def init_host_with_rpc(self):
ctxt = context.get_admin_context()
self.request_service_capabilities(ctxt)

4
manila/service.py

@ -105,6 +105,7 @@ class Service(service.Service):
LOG.info('Starting %(topic)s node (version %(version_string)s)',
{'topic': self.topic, 'version_string': version_string})
self.model_disconnected = False
self.manager.init_host()
ctxt = context.get_admin_context()
if self.coordinator:
@ -126,7 +127,8 @@ class Service(service.Service):
self.rpcserver = rpc.get_server(target, endpoints)
self.rpcserver.start()
self.manager.init_host()
self.manager.init_host_with_rpc()
if self.report_interval:
pulse = loopingcall.FixedIntervalLoopingCall(self.report_state)
pulse.start(interval=self.report_interval,

4
manila/tests/scheduler/test_manager.py

@ -85,14 +85,14 @@ class SchedulerManagerTestCase(test.TestCase):
self.assertIsInstance(test_manager.driver, filter.FilterScheduler)
def test_init_host(self):
def test_init_host_with_rpc(self):
self.mock_object(context,
'get_admin_context',
mock.Mock(return_value='fake_admin_context'))
self.mock_object(self.manager, 'request_service_capabilities')
self.manager.init_host()
self.manager.init_host_with_rpc()
self.manager.request_service_capabilities.assert_called_once_with(
'fake_admin_context')

6
releasenotes/notes/bug-1271568-fix-rpc-init-host-with-rpc-6e76afa553b4f2af.yaml

@ -0,0 +1,6 @@
---
fixes:
- |
An issue with RPC handling on service restart was addressed by ensuring
proper initialization before creating the RPC consumer. See `bug 1271568
<https://bugs.launchpad.net/manila/+bug/1271568>`_ for more details.
Loading…
Cancel
Save