Fix leaked file descriptors by cleaning up objects

A reference to the ovsdbapp Connection object is stored on the the
API impl class and it is causing the object to stick around and
its pipe fds to never close. Ultimately, python-ovs's call to
select() is limited to 1024 file descriptors and will eventually
error out. This deletes the connection and api objects explicitly
when we are done with them.

Conflicts:
    ovn_octavia_provider/driver.py
    ovn_octavia_provider/helper.py
    ovn_octavia_provider/ovsdb/impl_idl_ovn.py

Change-Id: I97b27eaa293fb161724d34da88b4398f8b590c33
Co-authored-by: Brian Haley <bhaley@redhat.com>
Closes-Bug: #1894136
(cherry picked from commit 5b0715d967)
This commit is contained in:
Terry Wilson 2020-10-15 12:53:36 -05:00 committed by Brian Haley
parent 9aaf0862b3
commit e6c7e5a377
1 changed files with 6 additions and 4 deletions

View File

@ -186,10 +186,11 @@ class OvnNbIdlForLb(ovsdb_monitor.OvnIdl):
def stop(self):
# Close the running connection if it has been initalized
if ((hasattr(self, 'conn') and not
self.conn.stop(timeout=ovn_conf.get_ovn_ovsdb_timeout()))):
LOG.debug("Connection terminated to OvnNb "
"but a thread is still alive")
if hasattr(self, 'conn'):
if not self.conn.stop(timeout=ovn_conf.get_ovn_ovsdb_timeout()):
LOG.debug("Connection terminated to OvnNb "
"but a thread is still alive")
del self.conn
# complete the shutdown for the event handler
self.notify_handler.shutdown()
# Close the idl session
@ -266,6 +267,7 @@ class OvnProviderHelper(object):
self.requests.put({'type': REQ_TYPE_EXIT})
self.helper_thread.join()
self.ovn_nbdb.stop()
del self.ovn_nbdb_api
@staticmethod
def _map_val(row, col, key):