diff options
author | Zuul <zuul@review.opendev.org> | 2022-02-07 19:45:55 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-02-07 19:45:55 +0000 |
commit | 0e3c885a34b572a504082093e851b9711c5016b9 (patch) | |
tree | 6f6b3b3a25bef64ba2a6aef8826db9d8da2835ed /ironic/common | |
parent | 45325c21ec25f9f4f26cb602e3cd59c3ee5c49dd (diff) | |
parent | 2c58ab3703675b43d9f197f609fc576e850ac0da (diff) | |
download | ironic-0e3c885a34b572a504082093e851b9711c5016b9.tar.gz |
Merge "Wait for conductor start before notifying systemd"
Diffstat (limited to 'ironic/common')
-rw-r--r-- | ironic/common/rpc_service.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ironic/common/rpc_service.py b/ironic/common/rpc_service.py index 78379c981..b0eec7758 100644 --- a/ironic/common/rpc_service.py +++ b/ironic/common/rpc_service.py @@ -15,6 +15,8 @@ # under the License. import signal +import sys +import time from ironic_lib.json_rpc import server as json_rpc from oslo_config import cfg @@ -42,9 +44,29 @@ class RPCService(service.Service): self.topic = self.manager.topic self.rpcserver = None self.deregister = True + self._failure = None + self._started = False + + def wait_for_start(self): + while not self._started and not self._failure: + time.sleep(0.1) + if self._failure: + LOG.critical(self._failure) + sys.exit(self._failure) def start(self): + self._failure = None + self._started = False super(RPCService, self).start() + try: + self._real_start() + except Exception as exc: + self._failure = f"{exc.__class__.__name__}: {exc}" + raise + else: + self._started = True + + def _real_start(self): admin_context = context.get_admin_context() serializer = objects_base.IronicObjectSerializer(is_server=True) |