summaryrefslogtreecommitdiff
path: root/ironic/common
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-02-07 19:45:55 +0000
committerGerrit Code Review <review@openstack.org>2022-02-07 19:45:55 +0000
commit0e3c885a34b572a504082093e851b9711c5016b9 (patch)
tree6f6b3b3a25bef64ba2a6aef8826db9d8da2835ed /ironic/common
parent45325c21ec25f9f4f26cb602e3cd59c3ee5c49dd (diff)
parent2c58ab3703675b43d9f197f609fc576e850ac0da (diff)
downloadironic-0e3c885a34b572a504082093e851b9711c5016b9.tar.gz
Merge "Wait for conductor start before notifying systemd"
Diffstat (limited to 'ironic/common')
-rw-r--r--ironic/common/rpc_service.py22
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)