Add wait event for metadataagent sb_idl

resolve bug:'MetadataAgent' object has no attribute 'sb_idl'

Closes-Bug: #1953295
Change-Id: Id83bee82e5c476395ff422dcaf89c0095e74a8ec
(cherry picked from commit 385b0ad203)
This commit is contained in:
shanyunfan33 2021-12-16 10:48:53 +08:00 committed by Lucas Alvares Gomes
parent d1dce2b291
commit ea364deb01
1 changed files with 17 additions and 0 deletions

View File

@ -14,6 +14,7 @@
import collections
import re
import threading
import uuid
from neutron_lib import constants as n_const
@ -184,6 +185,18 @@ class MetadataAgent(object):
self._process_monitor = external_process.ProcessMonitor(
config=self.conf,
resource_type='metadata')
self._sb_idl = None
self._post_fork_event = threading.Event()
@property
def sb_idl(self):
if not self._sb_idl:
self._post_fork_event.wait()
return self._sb_idl
@sb_idl.setter
def sb_idl(self, val):
self._sb_idl = val
def _load_config(self):
self.chassis = self._get_own_chassis_name()
@ -228,6 +241,7 @@ class MetadataAgent(object):
# Chassis table.
# Open the connection to OVN SB database.
self.has_chassis_private = False
self._post_fork_event.clear()
try:
self.sb_idl = ovsdb.MetadataAgentOvnSbIdl(
chassis=self.chassis, tables=tables + ('Chassis_Private', ),
@ -238,6 +252,9 @@ class MetadataAgent(object):
chassis=self.chassis, tables=tables,
events=events + (ChassisCreateEvent(self), )).start()
# Now IDL connections can be safely used.
self._post_fork_event.set()
# Do the initial sync.
self.sync()