diff options
Diffstat (limited to 'ironic/common')
-rw-r--r-- | ironic/common/rpc.py | 10 | ||||
-rw-r--r-- | ironic/common/rpc_service.py | 4 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ironic/common/rpc.py b/ironic/common/rpc.py index 95647a72a..285ee1f06 100644 --- a/ironic/common/rpc.py +++ b/ironic/common/rpc.py @@ -31,6 +31,9 @@ ALLOWED_EXMODS = [ exception.__name__, ] EXTRA_EXMODS = [] +GLOBAL_MANAGER = None + +MANAGER_TOPIC = 'ironic.conductor_manager' def init(conf): @@ -148,3 +151,10 @@ def get_versioned_notifier(publisher_id=None): assert VERSIONED_NOTIFIER is not None assert publisher_id is not None return VERSIONED_NOTIFIER.prepare(publisher_id=publisher_id) + + +def set_global_manager(manager): + global GLOBAL_MANAGER + if GLOBAL_MANAGER is not None and manager is not None: + raise RuntimeError("An attempt to set a global manager twice") + GLOBAL_MANAGER = manager diff --git a/ironic/common/rpc_service.py b/ironic/common/rpc_service.py index c0a550c64..bbf38d7f4 100644 --- a/ironic/common/rpc_service.py +++ b/ironic/common/rpc_service.py @@ -38,7 +38,7 @@ class RPCService(service.Service): self.host = host manager_module = importutils.try_import(manager_module) manager_class = getattr(manager_module, manager_class) - self.manager = manager_class(host, manager_module.MANAGER_TOPIC) + self.manager = manager_class(host, rpc.MANAGER_TOPIC) self.topic = self.manager.topic self.rpcserver = None self.deregister = True @@ -61,6 +61,7 @@ class RPCService(service.Service): self.handle_signal() self.manager.init_host(admin_context) + rpc.set_global_manager(self.manager) LOG.info('Created RPC server for service %(service)s on host ' '%(host)s.', @@ -84,6 +85,7 @@ class RPCService(service.Service): LOG.info('Stopped RPC server for service %(service)s on host ' '%(host)s.', {'service': self.topic, 'host': self.host}) + rpc.set_global_manager(None) def _handle_signal(self, signo, frame): LOG.info('Got signal SIGUSR1. Not deregistering on next shutdown ' |