From b85c273639f30cbffd95bfb92564adc8fb586465 Mon Sep 17 00:00:00 2001 From: Lucas Alvares Gomes Date: Thu, 6 Feb 2020 13:28:34 +0000 Subject: [PATCH] [OVN] Reduce the number of watched tables in MetadataProxyHandler This patch changes the SB IDL from the MetadataProxyHandler class to only watch the two required tables for it to function. The more tables it monitors, the bigger the burden is on the OVSDB to keep all the in-memory replicas updated. In special, the Chassis table can generate a lot of events due to the agents health check mechanism in the OVN driver so, removing it will prevent many events from being sent across the fabric. Closes-Bug: #1862648 Change-Id: Ib4fb9b445ed7fe4bce7bc05ae1b8dca264324718 Signed-off-by: Lucas Alvares Gomes --- neutron/agent/ovn/metadata/agent.py | 3 +-- neutron/agent/ovn/metadata/ovsdb.py | 10 ++++++---- neutron/agent/ovn/metadata/server.py | 11 +++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/neutron/agent/ovn/metadata/agent.py b/neutron/agent/ovn/metadata/agent.py index 35ff2dfe4f5..42228d8c0cc 100644 --- a/neutron/agent/ovn/metadata/agent.py +++ b/neutron/agent/ovn/metadata/agent.py @@ -171,8 +171,7 @@ class MetadataAgent(object): self._load_config() # Launch the server that will act as a proxy between the VM's and Nova. - proxy = metadata_server.UnixDomainMetadataProxy(self.conf, - self.chassis) + proxy = metadata_server.UnixDomainMetadataProxy(self.conf) proxy.run() # Open the connection to OVN SB database. diff --git a/neutron/agent/ovn/metadata/ovsdb.py b/neutron/agent/ovn/metadata/ovsdb.py index 703edc68042..eb5311d4d87 100644 --- a/neutron/agent/ovn/metadata/ovsdb.py +++ b/neutron/agent/ovn/metadata/ovsdb.py @@ -27,17 +27,19 @@ class MetadataAgentOvnSbIdl(ovsdb_monitor.OvnIdl): SCHEMA = 'OVN_Southbound' - def __init__(self, chassis, events=None): + def __init__(self, chassis=None, events=None, tables=None): connection_string = config.get_ovn_sb_connection() ovsdb_monitor._check_and_set_ssl_files(self.SCHEMA) helper = self._get_ovsdb_helper(connection_string) - tables = ('Chassis', 'Encap', 'Port_Binding', 'Datapath_Binding', - 'SB_Global') + if tables is None: + tables = ('Chassis', 'Encap', 'Port_Binding', 'Datapath_Binding', + 'SB_Global') for table in tables: helper.register_table(table) super(MetadataAgentOvnSbIdl, self).__init__( None, connection_string, helper) - self.tables['Chassis'].condition = [['name', '==', chassis]] + if chassis and 'Chassis' in tables: + self.tables['Chassis'].condition = [['name', '==', chassis]] if events: self.notify_handler.watch_events(events) diff --git a/neutron/agent/ovn/metadata/server.py b/neutron/agent/ovn/metadata/server.py index 8ab2f71bb93..6517a2e58b6 100644 --- a/neutron/agent/ovn/metadata/server.py +++ b/neutron/agent/ovn/metadata/server.py @@ -44,9 +44,8 @@ MODE_MAP = { class MetadataProxyHandler(object): - def __init__(self, conf, chassis=''): + def __init__(self, conf): self.conf = conf - self.chassis = chassis self.subscribe() def subscribe(self): @@ -57,7 +56,8 @@ class MetadataProxyHandler(object): def post_fork_initialize(self, resource, event, trigger, payload=None): # We need to open a connection to OVN SouthBound database for # each worker so that we can process the metadata requests. - self.sb_idl = ovsdb.MetadataAgentOvnSbIdl(chassis=self.chassis).start() + self.sb_idl = ovsdb.MetadataAgentOvnSbIdl( + tables=('Port_Binding', 'Datapath_Binding')).start() @webob.dec.wsgify(RequestClass=webob.Request) def __call__(self, req): @@ -162,9 +162,8 @@ class MetadataProxyHandler(object): class UnixDomainMetadataProxy(object): - def __init__(self, conf, chassis=''): + def __init__(self, conf): self.conf = conf - self.chassis = chassis agent_utils.ensure_directory_exists_without_file( cfg.CONF.metadata_proxy_socket) @@ -189,7 +188,7 @@ class UnixDomainMetadataProxy(object): def run(self): self.server = agent_utils.UnixDomainWSGIServer( 'networking-ovn-metadata-agent') - self.server.start(MetadataProxyHandler(self.conf, self.chassis), + self.server.start(MetadataProxyHandler(self.conf), self.conf.metadata_proxy_socket, workers=self.conf.metadata_workers, backlog=self.conf.metadata_backlog,