From ea364deb01a2bc70945bc955d69205d75f9c8a0d Mon Sep 17 00:00:00 2001 From: shanyunfan33 Date: Thu, 16 Dec 2021 10:48:53 +0800 Subject: [PATCH] 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 385b0ad203da40a2c0110948c0f46feb78ead2be) --- neutron/agent/ovn/metadata/agent.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/neutron/agent/ovn/metadata/agent.py b/neutron/agent/ovn/metadata/agent.py index 0e9b470d085..dd64e644e0b 100644 --- a/neutron/agent/ovn/metadata/agent.py +++ b/neutron/agent/ovn/metadata/agent.py @@ -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()